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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
php中require和require_once的区别说明
Feb 27 PHP
dedecms中使用php语句指南
Nov 13 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
php简单压缩css样式示例
Sep 22 PHP
PHP生成随机数的方法总结
Mar 01 PHP
php取出数组单个值的方法
Mar 12 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
PHP实现创建以太坊钱包转账等功能
Apr 21 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
node结合swig渲染摸板的方法
2018/04/11 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
Python抓取百度查询结果的方法
2015/07/08 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python pandas库的安装和创建
2019/01/10 Python
如何基于python生成list的所有的子集
2019/11/11 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
C#笔试题集合
2013/06/21 面试题
预防煤气中毒方案
2014/06/16 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
悬空寺导游词
2015/02/05 职场文书
三下乡活动心得体会
2016/01/23 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server
SpringBoot Http远程调用的方法
2022/08/14 Java/Android
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL