我正在开发自己的项目,需要从中文字符转换为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
提前致谢!
答案 0 :(得分:0)
如果你想在$_POST
数组中获得UTF-8,你需要告诉浏览器该表格是以UTF-8提交的。
通常,实现此目的的方法是为包含表单的页面提供一个指示符,表明该页面被编码为UTF-8。否则,浏览器将任意猜测正在使用哪种编码,并且该猜测可能不会是UTF-8。要指示UTF-8设置Content-Type
标头或包含在<head>
:
<meta charset="utf-8"/>
如果您在表单字段中包含字符人
,并且浏览器认为编码是一个(如cp1252西欧),但不包含字符人
,则会发生混乱并发送HTML字符引用编码版本人
。这是一个无用的数据修改,因为您无法判断原始输入是人
还是人
,但它是一个历史浏览器怪癖我们现在永远不会摆脱
这就是你获得2600000023000000
的原因:字符U + 0026,U + 0023是该受损版本的前导&#
部分。该字符串的其余部分为00
而不是后续字符,因为base_convert
处理的是浮点数,0x2600000023000000000000000000000000000000000000000000000000
对于保留精度而言,数字太大了。
如果您尝试将UTF-8编码的字符转换为数字代码点,请尝试uniord
/unichr
。