将Unicode特殊字符转换为UTF-8

时间:2018-11-22 02:20:02

标签: php unicode

我在将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

我做错了什么?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

至少您的正则表达式查找大写U,而所有转义序列都使用小写。

但是您的转换脚本从javascript转义的unicode字符到HTML实体,再到PHP字符串。对于这个字符串,这可能是一个更明智的解决方案:

$unicode = '\u0411. \u0426\u044d\u0446\u044d\u0433\u0441\u04af\u0440\u044d\u043d';
echo json_decode('"' . $unicode . '"');

但是请小心,因为如果输入字符串包含换行符或引号,这可能会中断。