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 ajax 分页类代码
Nov 13 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
浅析php header 跳转
Jun 17 PHP
php在apache环境下实现gzip配置方法
Apr 02 PHP
php递归遍历删除文件的方法
Apr 17 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
PHP实现的下载远程文件类定义与用法示例
Jul 05 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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读取html并截取字符串的简单代码
2009/11/30 PHP
php新建文件自动编号的思路与实现
2011/06/27 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP单链表的实现代码
2016/07/05 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
Express系列之multer上传的使用
2017/10/27 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
在Python中使用gRPC的方法示例
2018/08/08 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
小学家长评语大全
2014/04/16 职场文书
食品流通安全承诺书
2014/05/22 职场文书
企业安全标语
2014/06/07 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
单位授权委托书范文
2014/08/02 职场文书
大四学生个人总结
2015/02/15 职场文书
先进个人自荐书
2015/03/06 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
vue递归实现树形组件
2022/07/15 Vue.js