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

2015-01-24信息快讯网

中文字符编码研究系列第四期,PHP实现中文字符进制转换原理分析,主要讨论中文汉字转换为十进制和十六进制的方法,并掌握转换原理应用于实际开发。本文以GBK编码字符为例,讨论GBK编码的字符转换原理

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

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字符串的比较函数strcmp()与strcasecmp()的使用详解
PHP字符串的编码问题的详细介绍
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
php检测图片木马多进制编程实践
str_replace只替换一次字符串的方法
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
PHP 数组和字符串互相转换实现方法
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
PHP人民币金额数字转中文大写的函数代码
PHP-redis中文文档介绍
PHP5.4中json_encode中文转码的变化小结
PHP读取数据库并按照中文名称进行排序实现代码
PHP UTF8中文字符截断函数代码
PHP取进制余数函数代码
php urlencode()与urldecode()函数字符编码原理详解
PHP性能优化工具篇Benchmark类调试执行时间
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
php的chr和ord函数实现字符加减乘除运算实现代码
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP详解ASCII码对照表与字符转换
php从右向左/从左向右截取字符串的实现方法
支持中文的php加密解密类代码
Linux fgetcsv取得的数组元素为空字符串的解决方法
PHP学习散记_编码(json_encode 中文不显示)
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
php smarty截取中文字符乱码问题?gb2312/utf-8
让Json更懂中文(JSON_UNESCAPED_UNICODE)
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
php中计算中文字符串长度、截取中文字符串的函数代码
php中截取中文字符串的代码小结
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
©2014-2024 dbsqp.com