JSON解析utf-8错误中的单引号

时间:2013-01-21 12:37:07

标签: php utf-8 json

我一直对这个问题感到疯狂:

我有这个代码:

var names = JSON.parse('<?php echo json_encode($names ); ?>');

其中$names是一个包含utf-8内容的数组。

哪个工作正常,但当$names数组包含'时,我开始收到unexpected token/charachter错误。

我尝试了各种各样的事情,例如:

var names = JSON.parse('<?php echo 
json_encode(str_replace("'","\'",$names),JSON_HEX_APOS  | JSON_HEX_QUOT ); ?>');

var names = JSON.parse('<?php
 echo json_encode($names,JSON_HEX_APOS  | JSON_HEX_QUOT ); ?>');

没有帮助。我收到Uncaught SyntaxError: Unexpected token错误。

var names = JSON.parse('{"1":{"136":{"0":"135 \u05dc\u05dc\u05d0 
 \u05d4\u05d2\u05d1\u05dc\u05d4"},"75":{"0":"\u05d1\u05d5\u05e0\u05d5\u05e1 75"},"199":
  {"0":"\u05d1\u05d5\u05e0\u05d5\u05e1 199"},"5":{"0":"card bonus 5"},"30":
  {"0":"\u05e1\u05dc\u05e7\u05d5\u05dd \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea"},"40":{"0":"40
  \u05e2\u05e8\u05d1\u05d9\u05ea"}],"37":[{"0":"\u05d6\u05e8\u05d5 
 \u05d0\u05e0\u05d2\u05dc\u05d9\u05ea"}],"38":[{"0":"\u05d6\u05e8\u05d5 
 \u05e8\u05d5\u05e1\u05d9\u05ea"}],"39":
 [{"0":"\u05d6\u05e8\u05d5 \u05d8\u05d0\u05d9"}]}');

这是一个非常长的字符串,我只是减少了一半,所以语法可能看起来不正确,但一般的想法。

我怎样才能解析数组呢?

我正在使用PHP 5.3,因此如果相关,我无法尝试JSON_UNESCAPED_SLASHESJSON_UNESCAPED_UNICODE

1 个答案:

答案 0 :(得分:3)

有效的JSON是有效的JavaScript;你可以简单地写一下:

var names = <?php echo json_encode($names ); ?>;

对于UTF-8字符,这是一个测试:

<script>
alert(<?php echo json_encode("\xE2\x82\xAC"); ?>); // should alert €
</script>