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 相关文章推荐
web方式ftp
Oct 09 PHP
程序员编程十条戒律
Jul 09 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
Laravel的加密解密与哈希实例讲解
Mar 24 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使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
javascript读取RSS数据
2007/01/20 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python三方库之requests的快速上手
2019/03/04 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
运动会广播稿100字
2014/01/11 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
企业法人授权委托书
2014/04/03 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
综合办公室岗位职责
2015/04/11 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
A22国内电台短波广播频率表
2022/05/10 无线电