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


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 simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
PHP 基于文件头的文件类型验证类函数
May 01 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
php去掉文件前几行的方法
Jul 29 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
解决php extension 加载顺序问题
Aug 16 PHP
php封装的page分页类完整实例代码
Feb 01 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
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
python fabric实现远程操作和部署示例
2014/03/25 Python
python的re模块应用实例
2014/09/26 Python
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
详解用python实现简单的遗传算法
2018/01/02 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
Python使用Matlab命令过程解析
2020/06/04 Python
Python turtle库的画笔控制说明
2020/06/28 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
公司总经理岗位职责
2014/03/15 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
golang正则之命名分组方式
2021/04/25 Golang
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
基于Python实现射击小游戏的制作
2022/04/06 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL