bin2hex使用psot函数返回不同的结果

时间:2014-12-29 09:26:16

标签: php unicode

我正在开发自己的项目,需要从中文字符转换为Unicode。

目前,我使用下面的代码没有问题

base_convert(bin2hex(iconv("utf-8", "ucs-4", '人')), 16, 16) // Return 4eba

但是,当我尝试添加一个表单来转换用户输入的字符时,结果是不同的

base_convert(bin2hex(iconv("utf-8", "ucs-4", $_POST["char"])), 16, 16) // Return 2600000023000000000000000000000000000000000000000000000000

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果你想在$_POST数组中获得UTF-8,你需要告诉浏览器该表格是以UTF-8提交的。

通常,实现此目的的方法是为包含表单的页面提供一个指示符,表明该页面被编码为UTF-8。否则,浏览器将任意猜测正在使用哪种编码,并且该猜测可能不会是UTF-8。要指示UTF-8设置Content-Type标头或包含在<head>

<meta charset="utf-8"/>

如果您在表单字段中包含字符,并且浏览器认为编码是一个(如cp1252西欧),但不包含字符,则会发生混乱并发送HTML字符引用编码版本&#20154;。这是一个无用的数据修改,因为您无法判断原始输入是还是&#20154;,但它是一个历史浏览器怪癖我们现在永远不会摆脱

这就是你获得2600000023000000的原因:字符U + 0026,U + 0023是该受损版本的前导&#部分。该字符串的其余部分为00而不是后续字符,因为base_convert处理的是浮点数,0x2600000023000000000000000000000000000000000000000000000000对于保留精度而言,数字太大了。

如果您尝试将UTF-8编码的字符转换为数字代码点,请尝试uniord/unichr