PHP中实现中文字符进制转换原理分析


Posted in PHP onDecember 06, 2011

一,中文字符转十进制原理分析

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);

PHP中实现中文字符进制转换原理分析
由于一个汉字为两个字符组成,通过ord()函数获取字符的ASCII值如果大于127时,就可以确定当前字符为一个汉字的前半部分,还需要获取汉字的后半部分。当然,这种判断的方法要结合具体的开发环境,如果存在ASCII值大于127的单个字符,这种方法判断显然就不正确。

PHP实现中文字符转十进制的原理就是通过for循环的方法获取一个汉字的二个字符,然后使用ord()函数把各字符转换为十进制。如上分别是:不 [178 187] 要 [210 170] 迷 [195 212] 恋 [193 181] 哥 [184 231]

二,中文字符转十六进制原理分析

使用UltraEdit开发工具可以直接查看中文字符的十六进制,如下图

如,查看“不要迷恋哥”这五个字的十六进制
PHP中实现中文字符进制转换原理分析
从上面的图可以知道各个汉字对应该的十六进制字符分别是:不 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);

结果如下图

PHP中实现中文字符进制转换原理分析

通过上面的方法实现把中文字符转换为十六进制,输出结果可对比使用UltraEdit开发工具获取的十六进制。

三,中文字符转二进制和八进制原理分析

实现中文字符转二进制和八进制与上面的十六进制转换原理一样,只是转换的函数不同,结合上面的实例代码,实现如下

中文字符转二进制,方法如下

$strings = array(); 
foreach($result as $v){ 
$dec = explode(" ",$v); 
$strings[] = decbin($dec[0])." ".decbin($dec[1]); 
} 
var_dump($strings);

结果如下:
PHP中实现中文字符进制转换原理分析
中文字符转八进制,方法如下
$strings = array(); 
foreach($result as $v){ 
$dec = explode(" ",$v); 
$strings[] = decoct($dec[0])." ".decoct($dec[1]); 
}

结果如下:
PHP中实现中文字符进制转换原理分析
了解PHP实现中文字符进制转换原理,再通过PHP内置函数urldecode()就可以把十六进制的字符串通过组合转换为正常的中文汉字,请关注下一期中文字符编码研究系列之urldecode()与urlencode()函数字符编码原理。
PHP 相关文章推荐
PHP注释实例技巧
Oct 03 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
php checkbox 取值详细说明
Aug 19 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
PHP实现多图片上传类实例
Jul 26 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
php实现的SSO单点登录系统接入功能示例分析
Oct 12 PHP
php实现的XML操作(读取)封装类完整实例
Feb 23 PHP
Mac系统下安装PHP Xdebug
Mar 30 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
PHP goto语句用法实例
Aug 06 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 #PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 #PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 #PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 #PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 #PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 #PHP
PHP详解ASCII码对照表与字符转换
Dec 05 #PHP
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php实现三级级联下拉框
2016/04/17 PHP
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
vue axios请求拦截实例代码
2018/03/29 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
python实现Floyd算法
2018/01/03 Python
python实现比较文件内容异同
2018/06/22 Python
Django 路由系统URLconf的使用
2018/10/11 Python
Python可迭代对象操作示例
2019/05/07 Python
pytorch数据预处理错误的解决
2020/02/20 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
python利用faker库批量生成测试数据
2020/10/15 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
绩效专员岗位职责
2013/12/02 职场文书
安全资料员岗位职责
2013/12/14 职场文书
网上蛋糕店创业计划书
2014/01/24 职场文书
工商管理专业自荐信
2014/06/03 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android
python神经网络Xception模型
2022/05/06 Python