我搜索并阅读了大多数相关主题,但它们不是我想要的。
我有一个带有 PHP 函数json_encode
JSON 加密字符串:
{"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);
对于在PHP中传递JSON编码字符串(例如,通过cURL(的更广泛问题,使用JSON_HEX_APOS选项是解决此问题的最干净方法。这也将解决您的问题,尽管前面的答案是正确的,您不需要调用parseJSON,并且JavaScript对象是相同的,而无需在$data
上调用parseJSON。
对于您的代码,您只需进行以下更改:
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 常量
但是,当我更改 JSON 编码字符串时 - 将反斜杠添加到单引号
这在 PHP 字符串文字中对其进行了转义。然后将其作为简单的'
插入到 PHP 字符串中。
如果你想在将它插入 JavaScript 之前对其进行转义,那么你需要在你从json_encode
中得到的字符串中添加斜杠(或者更确切地说,因为你没有使用它(你应该是!(你手动构建的 JSON 字符串(。
不过,这是您需要的更多工作。 真正的解决方案是记住JSON是JavaScript文字语法的一个子集:
var obj = <?=$data?>;
如果问题仅与单引号有关,这应该很简单:
str_replace("'", "''", json_encode($array));
您面临的问题是,您将对 JavaScript 的json_encode
调用的结果显示为字符串,而它是有效的 JavaScript。从输出中删除jQuery.jsonParse
集,只需将回显结果分配给有问题的 JavaScript 变量即可。
var obj = <?= json_encode(array("casts"=>array(
"Matthew Modine","Adam Baldwin","Vincent D'Onofrio"
),"year"=>1987)); ?>;
看看它真的对我有帮助
$products_arr=array();
$products_arr["category"]=array();
while ($row = $cats->fetch(PDO::FETCH_ASSOC)){
$product_item=array(
"id" => $row['id'],
"title" => json_encode($row['title'])// these will help you
);
array_push($products_arr["category"], $product_item);
}
echo json_encode($products_arr);