PHP 中文与16进制转换问题?

发布网友 发布时间:2022-04-06 01:07

我来回答

3个回答

懂视网 时间:2022-04-06 05:28

php字符串转为16进制的方法:首先创建一个PHP示例文件;然后通过String2Hex方法将字符串转为16进制;最后通过return返回转换结果即可。

推荐:《PHP视频教程》

php字符串和16进制编码的相互转换

php字符串是十进制的

/**
**字符串转16进制
**/
 public function String2Hex($string){
 $hex='';
 for ($i=0; $i < strlen($string); $i++){
  $hex .= dechex(ord($string[$i]));
 }
 return $hex;
 }
/**
**16进制转字符串
**/
 public function Hex2String($hex){
 $string='';
 for ($i=0; $i < strlen($hex)-1; $i+=2){
  $string .= chr(hexdec($hex[$i].$hex[$i+1]));
 }
 return $string;
 }
// example:
$hex = String2Hex("test sentence...");
// $hex contains 746573742073656e74656e63652e2e2e
echo Hex2String($hex);
// outputs: test sentenc

我在做aes加密是发现一个问题,发现将字符串转16进制会出现转出数据位数对不上的问题可以修改为如下试试:

 public function String2Hex($string){
 $hex='';
// for ($i=0; $i < strlen($string); $i++){
//  $hex .= dechex(ord($string[$i]));
// }
 $hex = bin2hex($string);
 return $hex;
 }

热心网友 时间:2022-04-06 02:36

以 \u 开头,后跟4个十六进制数(即范围在 0-9 A-F的字符),是unicode编码格式的字符。

在PHP中,如果想要进行两者之间的转换,可以使用以下的函数:

<meta charset="UTF-8"/>
<?php
// 转换编码,将可以浏览的utf-8字符串转换成Unicode编码
function unicode_encode($uStr)
{
$uStr = iconv('UTF-8', 'UCS-2', $uStr);
$len = strlen($uStr);
$str = '';
//for ($i = 0; $i < $len – 1; $i = $i + 2){
for ($i = 0; $i < $len - 1; $i = $i + 2) {
$c = $uStr[$i];
$c2 = $uStr[$i + 1];
if (ord($c) > 0) { // 两个字节的文字
$str .= '\u' . base_convert(ord($c), 10, 16) . base_convert(ord($c2), 10, 16);
} else {
$str .= $c2;
}
}
return $str;
}
// 转换编码,将Unicode编码转换成可以浏览的utf-8字符串
function unicode_decode($uStr)
{
$pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
preg_match_all($pattern, $uStr, $matches);
if (!empty($matches)) {
$uStr = '';
for ($j = 0; $j < count($matches[0]); $j++) {
$str = $matches[0][$j];
if (strpos($str, '\\u') === 0) {
$code = base_convert(substr($str, 2, 2), 16, 10);
$code2 = base_convert(substr($str, 4), 16, 10);
$c = chr($code) . chr($code2);
$c = iconv('UCS-2', 'UTF-8', $c);
$uStr .= $c;
} else {
$uStr .= $str;
}
}
}
return $uStr;
}
$uStr = '大家好';
echo '原始字符: ', $uStr , ' Undicode编码:', unicode_encode($uStr);
?>

热心网友 时间:2022-04-06 03:54

php 十六进制和字符串互相转换
function SingleDecToHex($dec)
{
$tmp="";
$dec=$dec%16;
if($dec<10)
return $tmp.$dec;
$arr=array("a","b","c","d","e","f");
return $tmp.$arr[$dec-10];
}
function SingleHexToDec($hex)
{
$v=ord($hex);
if(47<$v&&$v<58)
return $v-48;
if(96<$v&&$v<103)
return $v-87;
}
function SetToHexString($str)
{
if(!$str)return false;
$tmp="";
for($i=0;$i<strlen($str);$i++)
{
$ord=ord($str[$i]);
$tmp.=SingleDecToHex(($ord-$ord%16)/16);
$tmp.=SingleDecToHex($ord%16);
}
return $tmp;
}
function UnsetFromHexString($str)
{
if(!$str)return false;
$tmp="";
for($i=0;$i<strlen($str);$i+=2)
{
$tmp.=chr(SingleHexToDec(substr($str,$i,1))*16+SingleHexToDec(substr($str,$i+1,1)));
}
return $tmp;
}
echo SetToHexString("hello,大家好123");
echo "<hr>";
echo UnsetFromHexString(SetToHexString("hello,大家好123"));

参考资料:http://www.thinksaas.cn/group/topic/13578/

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com