【问题标题】:JSON encode unicode issue on PHP5.3PHP5.3 上的 JSON 编码 unicode 问题
【发布时间】:2013-05-18 22:04:21
【问题描述】:

json_encode 之后的希伯来语字符串如下所示: [{"id":"1","值":"\u05d1\u05dc\u05d0\u05d2\u05df"} 任何想法这是什么编码,我如何让它工作或再次可读? 顺便说一句,这是一个在 PHP 5.3 上运行的 Joomla 系统,字符串来自发布请求,而不是数据库和 UTF-8 元标记确实存在。

【问题讨论】:

  • 看起来像 unicode。
  • 也许您可以使用 base64 对字符串进行编码,并在需要时对其进行解码
  • 正常的,你可以使用,你会得到正常的数据

标签: php json joomla2.5


【解决方案1】:

这就是 JSON 编码非 ASCII 字符的方式。当您通过 JSON 解析器 传递文本时,文本将再次可读。

PHP 5.4 为json_encodeJSON_UNESCAPED_UNICODE 定义了一个新选项,它将按原样传递 UTF-8 文本而不将其转换为转义码。由于您使用的是 PHP 5.3,因此您无法使用它,但如果您使用的是 5.4,它将是这样使用的:

$json = json_encode($obj, JSON_UNESCAPED_UNICODE); // PHP 5.4 required

但是,这不是必需的,因为 JSON 解析器会解码转义码。

【讨论】:

  • 无论如何,谢谢,这实际上有很多帮助!解码后文本可读,似乎我的问题实际上是斜杠在进入数据库时​​消失了。谢谢!
【解决方案2】:
$encoded = json_encode($json);

$unescaped = preg_replace_callback('/\\\\u(\w{4})/', function ($matches) {
            return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT,'UTF-8');
        }, $encoded);

file_put_contents('sample.json', $unescaped);

【讨论】:

  • 虽然这可能会回答问题,但在您的答案中加入一些文字来解释您在做什么总是一个好主意。阅读how to write a good answer
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2012-12-12
相关资源
最近更新 更多