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 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
php检测url是否存在的方法
Apr 14 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
Jun 03 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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可变函数的使用详解
2013/06/14 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python网络编程实例简析
2014/09/26 Python
python根据文件大小打log日志
2014/10/09 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
在Python中定义一个常量的方法
2018/11/10 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
简单了解python协程的相关知识
2019/08/31 Python
python 遍历pd.Series的index和value
2019/11/26 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
python脚本定时发送邮件
2020/12/22 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
应届生自我鉴定
2013/12/11 职场文书
森林防火工作方案
2014/02/14 职场文书
班级德育工作实施方案
2014/02/21 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
相亲活动方案
2014/08/26 职场文书
2014年手术室工作总结
2014/11/26 职场文书