我在将Unicode字符转换为utf-8时遇到问题。 这是我的代码:
<?php
$unicode = '\u0411. \u0426\u044d\u0446\u044d\u0433\u0441\u04af\u0440\u044d\u043d';
$utf8string = html_entity_decode(preg_replace("/U\+([0-9A-F]{4})/", "&#x\\1;", $unicode), ENT_NOQUOTES, 'UTF-8');
echo $utf8string;
?>
它在下面给了我
\u0411. \u0426\u044d\u0446\u044d\u0433\u0441\u04af\u0440\u044d\u043d
我做错了什么?有什么建议吗?
答案 0 :(得分:1)
至少您的正则表达式查找大写U
,而所有转义序列都使用小写。
但是您的转换脚本从javascript转义的unicode字符到HTML实体,再到PHP字符串。对于这个字符串,这可能是一个更明智的解决方案:
$unicode = '\u0411. \u0426\u044d\u0446\u044d\u0433\u0441\u04af\u0440\u044d\u043d';
echo json_decode('"' . $unicode . '"');
但是请小心,因为如果输入字符串包含换行符或引号,这可能会中断。