PHP函数篇之掌握ord()与chr()函数应用

2015-01-24信息快讯网

ord()函数把字符转换为十进制数字,chr()函数把十进制数字转化为字符,在二进制,八进制,十进制与十六进制之间充当桥梁的作用

中文字符编码研究系列第三期,PHP函数篇掌握ord()与 chr()函数应用,上期[PHP基础篇详解ASCII码对照表与字符转换]一文中了解了ASCII码和字符转换的方法,但使用时发现在字符转换之间需要两个特殊的函数,用于字符与十进制之间的转换,ord()函数把字符转换为十进制数字,chr()函数把十进制数字转化为字符,在二进制,八进制,十进制与十六进制之间充当桥梁的作用。

一,ord()函数的应用
ord()函数用于返回一个字符的ASCII值,最基本的用法如获取a 的ASCII值ord('a')返回 97,但在实际开发中,应用最多的还是用于字符截取函数中获取中文字符高低位编码的十进制数,如常见的中文字符截取函数具体可看看PHPWind或 Discuz!论坛源代码中substrs()函数或cutstr()函数,其原理就是通过ord()函数获取字符的ASCII码值,如果返回值大于 127则表示为中文字符的一半,再获取后一半组合成一个完整字符,同时结合字符编码如GBK或UTF-8等。

以GBK编码为例利用ord()函数判断中文字符返回各中文字符的ASCII值,代码如下
 
$string = "不要迷恋哥"; 
$length = strlen($string); 
var_dump($string);//原始中文 
var_dump($length);//长度 
$result = array(); 
for($i=0;$i<$length;$i++){ 
if(ord($string[$i])>127){ 
$result[] = $string[$i].' '.$string[++$i]; 
} 
} 
var_dump($result); 

代码说明
1,定义一个变量$string,其值为字符串
2,获取变量的长度(字节数)
3,打印变量和变量的长度
4,通过for循环获取变量的各个字节值,把一个汉字的两个字节中间用空格隔开显示。
结果如下图
PHP函数篇之掌握ord()与chr()函数应用_信息快讯网
图解:“不要迷恋哥”为5个汉字,共10个字节(一个汉字2个字节),分别打印各个字节无法正常显示如上图

初始值不变修改for循环部分代码显示各个字节ASCII值
 
$result = array(); 
for($i=0;$i<$length;$i++){ 
if(ord($string[$i])>127){ 
$result[] = ord($string[$i]).' '.ord($string[++$i]); 
} 
} 
var_dump($result); 

如上代码使用ord()函数打印各个字符的ASCII值,结果如下
PHP函数篇之掌握ord()与chr()函数应用_信息快讯网
通过ord()函数转换后就能正常查看各个字符的ASCII值。

二,chr()函数的应用

chr()函数的作用与ord()函数相反,用于返回指定的字符,如chr(97)返回a。

结合上面实例,只要获取到中文字符的ASCII值,就可以通过chr()函数组装出中文字符,代码如下
 
$string = "不要迷恋哥"; 
$length = strlen($string); 
var_dump($string);//原始中文 
var_dump($length);//长度 
$result = array(); 
for($i=0;$i<$length;$i++){ 
if(ord($string[$i])>127){ 
$result[] = ord($string[$i]).' '.ord($string[++$i]); 
} 
} 
var_dump($result); 
foreach($result as $v){ 
$decs = explode(" ",$v); 
echo chr($decs[0]).chr($decs[1]); 
} 

结果如下图
PHP函数篇之掌握ord()与chr()函数应用_信息快讯网

如上代码并没有直接输出中文字符,但打印出正常的汉字,其原理是首先获取各个字节的ASCII值,通过chr()函数转化为字节,再把两个字节组合起来就形成了一个完整的中文汉字。

通过对ord()与chr()函数的讨论已经初步了解了中文字符的编码原理,了解GBK编码中一个汉字二个字节,使用ord()与chr()函数实现各字节转换方法,请关注下一期中文字符编码研究系列之中文字符编码转换原理。

参考资料
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
PHP register_shutdown_function函数的深入解析
深入php函数file_get_contents超时处理的方法详解
PHP Error与Logging函数的深入理解
php的POSIX 函数以及进程测试的深入分析
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
基于wordpress主题制作的具体实现步骤
Apache服务器无法使用的解决方法
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
基于Zend的Captcha机制的应用
基于curl数据采集之正则处理函数get_matches的使用
使用Apache的htaccess防止图片被盗链的解决方法
整理的一些实用WordPress后台MySQL操作命令
将博客园(cnblogs.com)数据导入到wordpress的代码
PHP去掉从word直接粘贴过来的没有用格式的函数
php在程序中将网页生成word文档并提供下载的代码
php的chr和ord函数实现字符加减乘除运算实现代码
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP循环语句笔记(foreach,list)
PHP的array_diff()函数在处理大数组时的效率问题
PHP中usort在值相同时改变原始位置问题的解决方法
PHP中strtotime函数使用方法详解
用PHP写的基于Memcache的Queue实现代码
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
php空间不支持socket但支持curl时recaptcha的用法
php数组函数序列之array_search()- 按元素值返回键名
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
php数组函数序列之sort() 对数组的元素值进行升序排序
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
WordPress判断用户是否登录的代码
8个出色的WordPress SEO插件收集
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
©2014-2024 dbsqp.com