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


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设计模式 FlyWeight (享元模式)
Jun 26 PHP
php eval函数用法总结
Oct 31 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
php实现映射操作实例详解
Oct 02 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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
Wordpress php 分页代码
2009/10/21 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php事务处理实例详解
2014/07/11 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
Python双向循环链表实现方法分析
2018/07/30 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
python django生成迁移文件的实例
2019/08/31 Python
python属于解释型语言么
2020/06/15 Python
python中uuid模块实例浅析
2020/12/29 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
英国床垫在线:Mattress Online
2016/12/07 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
美术教师个人总结
2015/02/06 职场文书