我搜索并阅读了大部分相关主题,但它们并不是我想要的。
我有一个带有json_encode
PHP函数的JSON enocded字符串:
{"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;
在这种情况下,Google Chrome控制台会产生什么:
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);
答案 0 :(得分:63)
对于在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 manual entry示例#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 constants
答案 1 :(得分:15)
然而,当我对JSON编码的字符串进行更改时 - 将反斜杠添加到单引号
在PHP字符串文字中将其转义。然后将其作为简单的'
插入到PHP字符串中。
如果要在将其插入JavaScript之前将其转义,则需要在json_encode
out 的字符串中添加斜杠(或者更确切地说,因为您没有使用它(你应该!)你手工构建的JSON字符串。
这是你需要的更多工作。真正的解决方案是记住JSON是JavaScript文字语法的一个子集:
var obj = <?=$data?>;
答案 2 :(得分:4)
您面临的问题是您将json_encode调用的结果呈现为javascript为字符串,而它是通过有效的javascript。删除输出中设置的jQuery.jsonParse,只需将回显的结果分配给相关的javascript变量。
var obj = <?= json_encode(array("casts"=>array("Matthew Modine","Adam Baldwin","Vincent D'Onofrio"),"year"=>1987)); ?>;
答案 3 :(得分:1)
如果问题仅涉及单引号,则应该简单明了:
str_replace("'", "\'", json_encode($array));
答案 4 :(得分:0)
查看它确实对我有帮助
$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);