我搜索并阅读了大部分相关主题,但它们并不是我想要的.
我有一个带有json_encode
PHP函数的JSON enocded字符串:
{"casts":["Matthew Modine","Adam Baldwin","Vincent D'Onofrio"],"year":1987}
Run Code Online (Sandbox Code Playgroud)
我正在使用jQuery将值放在适当的字段中,在测试的情况下我做了以下操作:
<script>
var obj = jQuery.parseJSON('<?=$data?>');
console.log(obj);
</script>
Run Code Online (Sandbox Code Playgroud)
假设$ data是这样的:
$data =
<<<END
{"casts":["Matthew Modine","Adam Baldwin","Vincent D'Onofrio"],"year":1987}
END;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Google Chrome控制台会生成什么:
Uncaught SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)
但是,当我对JSON编码的字符串进行更改时 - 将反斜杠添加到单引号:
{"casts":["Matthew Modine","Adam Baldwin","Vincent D\'Onofrio"],"year":1987}
Run Code Online (Sandbox Code Playgroud)
控制台输出正常:
Object {casts: Array[3], year: 1987}
casts: Array[3]
year: 1987
Run Code Online (Sandbox Code Playgroud)
问题是:控制台中的这个错误是预期的吗?我想逃避或更换'
有\'
会这么脏!
更新
实际上$ data数据来自a json_encode($var)
而$ var是一个数组!
$data = json_encode($var);
Run Code Online (Sandbox Code Playgroud)
sea*_*urt 70
对于在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";
Run Code Online (Sandbox Code Playgroud)
这将输出:
Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Run Code Online (Sandbox Code Playgroud)
可以在此处找到JSON常量的完整列表:PHP.net JSON常量
Que*_*tin 17
但是,当我对JSON编码的字符串进行更改时 - 将反斜杠添加到单引号中
这在PHP字符串文字中逃脱了它.然后将其作为简单插入到PHP字符串中'
.
如果你想将其插入JavaScript的前逃脱它,那么你需要斜线添加到你得到的字符串出来的json_encode
(或者说,因为你没有使用(你应该!)JSON字符串你手工打造).
那是你需要的更多工作.真正的解决方案是记住JSON是JavaScript文字语法的子集:
var obj = <?=$data?>;
Run Code Online (Sandbox Code Playgroud)
如果问题仅与单引号有关,那么这应该很简单:
str_replace("'", "\'", json_encode($array));
Run Code Online (Sandbox Code Playgroud)
您面临的问题是您json_encode
将 JavaScript 调用的结果显示为字符串,而它是有效的 JavaScript。从jQuery.jsonParse
输出中删除set 并简单地将回显的结果分配给相关的 JavaScript 变量。
var obj = <?= json_encode(array("casts"=>array(
"Matthew Modine","Adam Baldwin","Vincent D'Onofrio"
),"year"=>1987)); ?>;
Run Code Online (Sandbox Code Playgroud)