GBK编码中一个汉字由二个字符组成,获取汉字字符串的方法如下
$string = "不要迷恋哥";
$length = strlen($string);
for($i=0;$i<$length;$i++){
if(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
var_dump($result);
由于一个汉字为两个字符组成,通过ord()函数获取字符的ASCII值如果大于127时,就可以确定当前字符为一个汉字的前半部分,还需要获取汉字的后半部分。当然,这种判断的方法要结合具体的开发环境,如果存在ASCII值大于127的单个字符,这种方法判断显然就不正确。
PHP实现中文字符转十进制的原理就是通过for循环的方法获取一个汉字的二个字符,然后使用ord()函数把各字符转换为十进制。如上分别是:不 [178 187] 要 [210 170] 迷 [195 212] 恋 [193 181] 哥 [184 231]
二,中文字符转十六进制原理分析
使用UltraEdit开发工具可以直接查看中文字符的十六进制,如下图
如,查看“不要迷恋哥”这五个字的十六进制
从上面的图可以知道各个汉字对应该的十六进制字符分别是:不 B2BB 要 D2AA 迷 C3D4 恋 C1B5 哥 B8E7
PHP 实现中文字符转十六进制的原理就是首先使用ord()函数取出各个中文字符的十进制,具体可查看[PHP函数篇掌握ord()与chr()函数应用],然后使用dechex()函数把各个中文字符转化为十六进制
实例源代码
$string = "不要迷恋哥";
$length = strlen($string);
echo $string;
$result = array();
//十进制
for($i=0;$i<$length;$i++){
if(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
var_dump($result);
//十六进制
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = dechex($dec[0])." ".dechex($dec[1]);
}
var_dump($strings);
结果如下图
通过上面的方法实现把中文字符转换为十六进制,输出结果可对比使用UltraEdit开发工具获取的十六进制。
三,中文字符转二进制和八进制原理分析
实现中文字符转二进制和八进制与上面的十六进制转换原理一样,只是转换的函数不同,结合上面的实例代码,实现如下
中文字符转二进制,方法如下
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = decbin($dec[0])." ".decbin($dec[1]);
}
var_dump($strings);
结果如下:
中文字符转八进制,方法如下
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = decoct($dec[0])." ".decoct($dec[1]);
}
结果如下:
了解PHP实现中文字符进制转换原理,再通过PHP内置函数urldecode()就可以把十六进制的字符串通过组合转换为正常的中文汉字,请关注下一期中文字符编码研究系列之urldecode()与urlencode()函数字符编码原理。
这是PHP性能优化系列第二期,如何使用PEAR工具类Benchmark逐行获取代码或函数的执行时间。
工欲善其事,必先利其器!
如何安装PEAR和Benchmark
请参考PHP性能优化系列第一期 [PHP性能优化准备篇图解PEAR安装]
Benchmark工具类包说明
直接下载:http://pear.php.net/package/Benchmark/download
Benchmark工具类包共有三个文件,分别是Timer.php、Iterate.php和Profiler.php,三个工具类功能相同,只是侧重点不同,都是用于调试代码获取程序的执行时间。
1,Benchmark_Timer类原理与通过microtime函数获取微秒时间再比较前后两个时间值的差相同。
2,Benchmark_Iterate类用于调试函数的平均执行时间。
3,Benchmark_Profiler类用于统计代码和函数的执行时间以及函数的调用次数。
具体使用方法三个文件内都有详细的使用实例。
如何获取一行或一段代码的执行时间
1,通常使用microtime函数获取代码前后的微秒时间数再比较两个值的时间差,如下
但这种方法很有局限制,不能大范围的应用,而且每次都需要书写很多代码,适合于简单的调试。具体请查看PHP手册详细说明。
2,通过使用benchmark_Timer类获取代码前后执行的时间差,可以同时获取N行代码的执行时间,操作简单,只需要增加一个marker标记即可,请看下面Benchmark_Timer类的使用说明
如何使用Benchmark_Timer类
Benchmark_Timer类只需要在调试文件中增加Benchmark_Timer类初始化声明和marker标注,文件尾打印各个标注处的执行时间,实例如下
打印结果有两种方法:
一种是表格输出方式,$timer->display(); 如下图
另外一种是手动var_dump或print_r打印,$timer->getProfiling();,print_r函数打印如下图
结果说明
1,name表示标注名称,如上 包含两个特殊标注start和stop表示开始和结束,其次是自定义标注 marker 01 marker 02等
2,time表示当前的微秒时间
3,diff表示上一个标记到当前标记的执行时间,这个就是我们需要获取的时间差,没错,看的就是这个值。
4,total表示执行到当前的整个时间
如何使用Benchmark_Iterate类
Benchmark_Iterate类用于调试函数执行的平均时间,与Benchmark_Timer类不同在于可以多次调用同一个函数获取其执行时间的平均值,实例如下:
通过调用test函数100次获取平均执行时间,结果如下
结果说明
1,每个数字表示每次调用的时间
2,mean表示函数执行的平均时间,如上调用100次test函数的平均时间为0.000476
3,iterations表示函数调用的次数
如何使用Benchmark_Profiler类
Benchmark_Profiler类用于统计函数的执行次数和执行时间等,实例如下:
结果如下
Benchmark_Profiler类在实际性能调试中使用并不多,因为还有比这个更好的工具,如xDebuger等,因此可直接忽略!
Benchmark 工具类在使用调试中针对逐行调试来分析程序性能问题非常实用,主要使用Benchmark_Timer类调试各代码段的时间点,以通过获取执行时间来优化程序提高代码的性能。这里就不再深入讨论,如果在使用的过程中有什么问题欢迎大家一起交流!
如果你发现这种逐行调试很累很辛苦,如果你想从整体上把握程序的性能情况,这个Benchmark类调试工具就不能满足你的需求,下期将讨论PHP性能调试工具xDebuger的安装与使用。
相关资料
microtime
(PHP 3, PHP 4, PHP 5)
microtime -- 返回当前 Unix 时间戳和微秒数
说明
mixed microtime ( [bool get_as_float] )
microtime() 当前 Unix 时间戳以及微秒数。本函数仅在支持 gettimeofday() 系统调用的操作系统下可用。
如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
如果给出了 get_as_float 参数并且其值等价于 TRUE,microtime() 将返回一个浮点数。
注意: get_as_float 参数是 PHP 5.0.0 新加的。
扩展资料
PHP Benchmark/Timer Class
PHP Benchmark
Benchmark and Optimize PHP Script Speed
什么是PEAR
PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR就是PHP的CPAN。
为什么要安装PEAR
PEAR提供了丰富的PHP扩展工具类,简单易用,可用于各个项目之中。Benchmark是PEAR的一个扩展包,提供Timer、Iterate和Profiler三个工具类,可用于性能优化过程中的断点调试获取代码的执行时间。
如何安装PEAR
打开源码安装的PHP根目录,如C:\Program Files\php5\php-5.2.6\,双击go-pear.bat文件,图解安装过程如下
这样,PEAR就安装成功,安装过程基本上只需要按Enter键即可,非常简单。
如何安装Benchmark类
访问:http://pear.php.net/ 搜索 benchmark
(1)DOS命令安装Benchmark工具类
输入如下命令
>pear install Benchmark-1.2.7
如:C:\Program Files\php5\php-5.2.6>pear install Benchmark-1.2.7
安装成功后直接访问PEAR目录,如C:\Program Files\php5\php-5.2.6\PEAR
(2)直接下载Benchmark工具类文件
下载地址:http://pear.php.net/package/Benchmark/download
Benchmark:http://download.pear.php.net/package/Benchmark-1.2.7.tgz
直接下载解压存在PEAR目录下,如C:\Program Files\php5\php-5.2.6\PEAR
这里只讨论PEAR安装,并以Benchmark工具包为例讨论如何使用PEAR下载和安装工具类包。下一期将讨论如何使用Benchmark工具类断点调试获取代码的执行时间和函数执行的平均时间。
其它说明
CPAN是什么?
CPAN是一个巨大的PERL的扩展模块仓库,编写的应用模块可以放在CPAN下面的适当的分类目录下面,其他的人可以很方便地复用,当然,你编写应用模块时候也需要遵守其中的准则
参考资料
PEAR http://pear.php.net/
PEAR简介:用PEAR来写你的下一个php程序