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面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
学习php分页代码实例
Oct 24 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
php文件上传简单实现方法
Jan 24 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 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文件注释标记及规范小结
2012/04/01 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python实现图片横向和纵向拼接
2020/03/05 Python
浅析Python 多行匹配模式
2020/07/24 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
教师业务学习制度
2014/01/25 职场文书
初二学生评语大全
2014/12/26 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js