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


Posted in PHP onDecember 05, 2011

中文字符编码研究系列第三期,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 相关文章推荐
PHP date函数参数详解
Nov 27 PHP
php ss7.5的数据调用 (笔记)
Mar 08 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
php数组(array)输出的三种形式详解
Jun 05 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
PHP数据库操作二:memcache用法分析
Aug 16 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 #PHP
PHP详解ASCII码对照表与字符转换
Dec 05 #PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 #PHP
PHP循环语句笔记(foreach,list)
Nov 29 #PHP
openPNE常用方法分享
Nov 29 #PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 #PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 #PHP
You might like
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
自荐书模板
2013/12/15 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
会计实训总结范文
2015/08/03 职场文书
趣味运动会广播稿
2015/08/19 职场文书
php字符串倒叙
2021/04/01 PHP
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
使用Ajax实现无刷新上传文件
2022/04/12 Javascript
spring boot实现文件上传
2022/08/14 Java/Android