一个可以找出源代码中所有中文的工具

  一个可以找出源代码中所有中文的工具

  填写需要查找的路径$sf即可。

  功能

  1 找出所有中文

  2 忽略注释语句中的中文

  3 可添加需要忽略的文件和文件夹

  4 生成日志文件

  如果您正发愁为自己的软件更新语言包

  请使用此工具。

  我的例子:

  http://127.0.0.1/tools/searchcn.php

  http://127.0.0.1/tools/cnlog.txt

  

复制代码 代码如下:

  <?php

  set_time_limit(0);

  ob_implicit_flush();

  //注释格式

  $remark = array(

  array('//debug', "\r\n")

  , array('/**', '*/')

  , array('/*debug', '*/')

  , array('/*note', '*/')

  , array('//note', "\r\n")

  );

  //以下目录和文件不被查询

  $filter = 'forumdata|config\.inc\.php|debug|test|readme|utilities|upgrade|\.tpl.php|index\.htm|\.lang.php';

  //项目目录

  $sf = 'd:\\data\\labs\\develop\\dzhead\\';

  //日志目录

  $logname = 'cnlog.txt';

  $langfile = 'lang.php';

  $log = fopen($logname, 'w');

  fclose($log);

  $lf = fopen($langfile, 'wb');

  fwrite($lf, "\r\n\r\n\t'spilt' => '----------------------------------------------------',");

  fclose($lf);

  $lf = fopen($langfile, 'ab');

  $ptag = '\\';

  findfile($sf);

  fwrite($lf, "\r\n);\r\n\r\n?>");

  fclose($lf);

  function findfile($sf){

  global $ptag, $logname, $filter, $lf;

  $log = fopen($logname, 'ab');

  global $remark;

  if(is_dir($sf)) {

  if($dh = opendir($sf)) {

  while(($file = readdir($dh)) !== false) {

  if($file == '.' || $file == '..') {

  continue;

  } elseif(filetype($sf.$file) == 'dir') {

  findfile($sf.$file.$ptag);

  } elseif((preg_match('/\.php$/', $file) || preg_match('/\.htm$/', $file)) && !preg_match('/('.$filter.')/', $sf.$file)) {

  $sfp = fopen($sf.$file, 'rb');

  $buf = fread($sfp, filesize($sf.$file));

  fclose($sfp);

  foreach($remark as $v) {

  $data = '';

  while(count($strcut = explode($v[0], $buf, 2)) > 1) {

  $data .= $strcut[0];

  if(($strcut = explode($v[1], $strcut[1], 2)) > 1){

  $buf = $strcut[1];

  } else {

  $buf = $strcut[0];

  break;

  }

  }

  $data .= $strcut[0];

  $buf = $data;

  }

  $data = $buf;

  $lines = 0;

  $cn = $str = '';

  $cns = 0;

  $ldata = "\r\n\t'".str_replace('.', '_', $file)."' => '";

  for($i = 0; $i < strlen($data); $i++){

  $c = ord($data{$i});

  if($c == 0x0A || $data{$i+1} == ''){

  $lines++;

  if(!empty($cn)){

  $ldata .= "',";

  $ldata = str_replace("\r\n\t'".str_replace('.', '_', $file)."' => '',", '', $ldata);

  fwrite($lf, $ldata);

  $cn = "\r\n$lines:".$cn;

  $str .= $cn;

  $cn = '';

  $ldata = "\r\n\t'".str_replace('.', '_', $file)."' => '";

  }

  } elseif($c >= 0x81 && $c <= 0xFE) {

  $c = ord($data{++$i});

  if($c >= 0x40 && $c <= 0xFE) {

  $cn .= $data{$i-1}.$data{$i};

  $ldata .= $data{$i-1}.$data{$i};

  while(($c = ord($data{++$i})) != 0x3C && $c != 0x0A && $c != 0x0D && $c != 0x27 && $c != 0x3E && $c != 0x3B && $c != 0x22 && $c != 0x3D && $c < 0x81) {

  $space .= chr($c);

  }

  $i--;

  if(ord($data{$i+1}) < 0x81) {

  $cns++;

  $cn .= '$';

  $ldata .= "',\r\n\t'".str_replace('.', '_', $file)."' => '";

  } else {

  $cn .= $space;

  }

  $space = '';

  }

  }

  }

  if($str != '') {

  fwrite($log, "\n--".$sf.$file."----------------------- (共 $cns 处)");

  echo "{$sf}$file (共 $cns 处)<br>";

  ob_flush();flush();

  $cns = 0;

  }

  fwrite($log, $str);

  $str = '';

  }

  }

  }

  }

  fclose($log);

  }

  ?>