php json_encode & jquery parseJSON 单引号问题

2022-08-30 11:46:38

我搜索并阅读了大多数相关主题,但它们不是我想要的。

我有一个带有PHP函数的JSON enocded字符串:json_encode

{"casts":["Matthew Modine","Adam Baldwin","Vincent D'Onofrio"],"year":1987}

我正在使用jQuery将值也放在适当的字段中,在测试的情况下,我做了以下操作:

<script>
var obj = jQuery.parseJSON('<?=$data?>');
console.log(obj);
</script>

假设$data是这样的:

$data =
<<<END
{"casts":["Matthew Modine","Adam Baldwin","Vincent D'Onofrio"],"year":1987}
END;

在这种情况下,谷歌浏览器控制台会产生什么:

Uncaught SyntaxError: Unexpected identifier 

但是,当我在JSON编码字符串中进行更改时 - 将反斜杠添加到单引号中:

{"casts":["Matthew Modine","Adam Baldwin","Vincent D\'Onofrio"],"year":1987}

控制台输出正常:

Object {casts: Array[3], year: 1987}
casts: Array[3]
year: 1987

问题:控制台中的此错误是预期的吗?我认为逃避或更换会很脏!'\'

更新

实际上,$data值来自json_encode($var),$var是数组!

$data = json_encode($var);

答案 1

对于在PHP中传递JSON编码字符串的更广泛问题(例如,通过cURL),使用JSON_HEX_APOS选项是解决此问题的最干净方法。这也将解决您的问题,尽管前面的答案是正确的,您不需要调用 parseJSON,并且 JavaScript 对象是相同的,而无需在 上调用 parseJSON。$data

对于您的代码,您只需进行以下更改:

json_encode($var)自。json_encode($var, JSON_HEX_APOS)

下面是 jQuery 解析正确编码数据的示例:http://jsfiddle.net/SuttX/

为了进一步阅读,这里有一个来自 PHP.net json_encode手动输入示例#2的示例:

$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");

echo "Apos: ",    json_encode($a, JSON_HEX_APOS), "\n";

这将输出:

Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]

可以在此处找到JSON常量的完整列表:PHP.net JSON常量


答案 2

但是,当我在JSON编码字符串中进行更改时 - 将反斜杠添加到单引号中

这在PHP字符串文本中转义它。然后将其作为简单的 插入到 PHP 字符串中。'

如果你想在将它插入到JavaScript之前对其进行转义,那么你需要在你得到的字符串中添加斜杠(或者更确切地说,因为你没有使用它(你应该是!)你手动构建的JSON字符串)。json_encode

不过,这需要做更多的工作。真正的解决方案是记住JSON是JavaScript文字语法的一个子集:

var obj = <?=$data?>;

推荐