如何把 utf8 汉字转 16 进制格式

2021-10-29 18:24:41 +08:00
 cs5117155
echo Utf8ToHex("5g");
function Utf8ToHex($str){
    $str = rawurlencode($str);
    $arr = explode('%',$str);
    $Hex = implode('',$arr);
    return $Hex;
}

我这个函数如果是汉字的情况它就是正确,如果是数字+英文,他就不行了。 比如输入5g得到 16 进制是35 67; 输入123456得到 16 进制是31 32 33 34 35 36; 网上找了几个 php 语言方法都不太好使

1703 次点击
所在节点    程序员
6 条回复
lcdtyph
2021-10-29 18:31:14 +08:00
没看懂,英文字母和数字经过几乎所有编码之后不都是一样的吗
eason1874
2021-10-29 20:03:55 +08:00
网上例子很多啊,随手搜就有

function hex_chars($data) {
$hex = '';
for ($i=0; $i<strlen($data); $i++) {
$c = substr($data, $i, 1);
//$hex .= '{'. hex_format(ord($c)). '}';
$hex .= hex_format(ord($c));
}
return $hex;
}

function hex_format($o) {
$h = strtoupper(dechex($o));
$len = strlen($h);
if ($len % 2 == 1)
$h = "0$h";
return $h;
}

echo hex_chars('5g') . "\n"; // 3567
echo hex_chars('你好') . "\n"; // E4BDA0E5A5BD

其实自己写也不难,徒手写考验知识,对着文档写就简单
lululau
2021-10-29 21:25:10 +08:00
echo 汉字 | od -An -tx1 | perl -alne 'print "@F"'
cs5117155
2021-10-29 23:56:14 +08:00
@eason1874 但是如果按照这个统一方法,输入 123456 ,就得不到`31 32 33 34 35 36`这样的结果了
eason1874
2021-10-30 12:10:35 +08:00
@cs5117155 #4 额,这区别不就是加了个空格吗


$hex .= hex_format(ord($c));

改成
$hex .= hex_format(ord($c)) . ' ';

就有空格了,当然会导致最后也多一个空格,你可以截断不要最后一个字符,比如 return substr($hex, 0, -1);
cs5117155
2021-10-30 14:56:59 +08:00
@eason1874 可以了,之前我替换函数错了,有些尴尬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX