我一直对这个问题感到疯狂:
我有这个代码:
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_SLASHES
或JSON_UNESCAPED_UNICODE
。
答案 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>