【问题标题】:Convert unicode special characters to UTF-8将 unicode 特殊字符转换为 UTF-8
【发布时间】:2018-11-22 02:20:01
【问题描述】:

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

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

【问题讨论】:

标签: php unicode


【解决方案1】:

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

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

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

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

【讨论】:

  • 很好,但是当传入的数据是动态的多种类型的文本时,我有疑问?
  • 检查我回答中的最后一句话。某些字符会使这个 JSON 无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多