将Unicode代码点转换为UTF-8

时间:2009-07-09 19:12:22

标签: php unicode utf-8

目前我有类似\u4eac\u90fd的内容,我希望将其转换为UTF-8,以便将其插入数据库。

3 个答案:

答案 0 :(得分:2)

最有可能的是,\ u转义序列已由Web浏览器发送。这将是您问题的原始来源 - 您需要让Web浏览器停止这样做。

为此,您需要确保浏览器知道在提交表单时要使用的编码。默认情况下,浏览器将始终使用包含表单的HTML页面的编码。确保此网页以UTF-8编码,并在元标题中包含UTF-8字符集声明。完成后,浏览器应正确提交UTF-8数据,您根本不需要转换任何内容。

答案 1 :(得分:2)

答案 2 :(得分:0)

json_decode('"\u4eac\u90fd"');

使用JSON @bobince https://stackoverflow.com/a/7107750的信誉,在这种情况下,反向搜索(UTF-8编码点)。那里的ASCII字符不会转换为代码点,但是会使用json_decode 转换,ASCII码点转换为字符,例如'“ \ u0041”'->'A'。

(请记住,您需要在字符串中使用双引号。我很困惑为什么json_decode('\ u4eac \ u90fd');没有给出输出:-)

请注意,对于4字节UTF-8编码有特殊要求,其中代码点由5或6个十六进制数字组成。 JSON不使用花括号。

echo json_encode('');
//output: "\ud800\udf48"

是U + 10348。对我来说,分成两个代码点并不明显。请研究是否处理4字节UTF-8编码(例如表情符号)。

这是应该存在标准用途函数的令人沮丧的示例之一,但其中一个必须使用变通方法并在线找到许多复杂的用户函数。

*该功能确实存在于PHP7(http://php.net/manual/en/intlchar.chr.php)中,但是您需要安装intl扩展名,我不认为默认情况下是这样。