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


Posted in PHP onOctober 25, 2006

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

填写需要查找的路径$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); 
} 
?>
PHP 相关文章推荐
php面向对象全攻略 (十七) 自动加载类
Sep 30 PHP
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
php中分页及SqlHelper类用法实例
Jan 12 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
PHP代码加密的方法总结
Mar 13 PHP
《APMServ 5.1.2》使用图解
Oct 23 #PHP
APMServ使用说明
Oct 23 #PHP
别人整理的服务器变量:$_SERVER
Oct 20 #PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 #PHP
PHP新手上路(十)
Oct 09 #PHP
来自PHP.NET的入门教程
Oct 09 #PHP
PHP新手上路(九)
Oct 09 #PHP
You might like
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
优秀的应届生自荐信
2014/05/23 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
Python 数据可视化之Matplotlib详解
2021/11/02 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis