• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-26) 20次浏览 已收录 0个评论

中文字符编码研究系列第三期,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值,代码如下

 <BR>$string = "不要迷恋哥"; <BR>$length = strlen($string); <BR>var_dump($string);//原始中文 <BR>var_dump($length);//长度 <BR>$result = array(); <BR>for($i=0;$i<$length;$i++){ <BR>if(ord($string[$i])>127){ <BR>$result[] = $string[$i].' '.$string[++$i]; <BR>} <BR>} <BR>var_dump($result); <BR>


代码说明
1,定义一个变量$string,其值为字符串
2,获取变量的长度(字节数)
3,打印变量和变量的长度
4,通过for循环获取变量的各个字节值,把一个汉字的两个字节中间用空格隔开显示。
结果如下图

图解:“不要迷恋哥”为5个汉字,共10个字节(一个汉字2个字节),分别打印各个字节无法正常显示如上图

初始值不变修改for循环部分代码显示各个字节ASCII值

 <BR>$result = array(); <BR>for($i=0;$i<$length;$i++){ <BR>if(ord($string[$i])>127){ <BR>$result[] = ord($string[$i]).' '.ord($string[++$i]); <BR>} <BR>} <BR>var_dump($result); <BR>


如上代码使用ord()函数打印各个字符的ASCII值,结果如下

通过ord()函数转换后就能正常查看各个字符的ASCII值。

二,chr()函数的应用

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

结合上面实例,只要获取到中文字符的ASCII值,就可以通过chr()函数组装出中文字符,代码如下

 <BR>$string = "不要迷恋哥"; <BR>$length = strlen($string); <BR>var_dump($string);//原始中文 <BR>var_dump($length);//长度 <BR>$result = array(); <BR>for($i=0;$i<$length;$i++){ <BR>if(ord($string[$i])>127){ <BR>$result[] = ord($string[$i]).' '.ord($string[++$i]); <BR>} <BR>} <BR>var_dump($result); <BR>foreach($result as $v){ <BR>$decs = explode(" ",$v); <BR>echo chr($decs[0]).chr($decs[1]); <BR>} <BR>


结果如下图

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

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

参考资料
PHPWind与Discuz截取字符函数substrs与cutstr性能比较


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP函数篇之掌握ord()与chr()函数应用_php技巧

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址