如何解决PHP向JavaScript传递JSON时的特殊字符转义与语法错误问题?
解决JS解析JSON时的Unexpected Identifier语法错误
这个问题的核心是你输出的JSON字符串在JS里存在引号冲突,导致解析失败。咱们一步步拆解问题和解决办法:
错误原因分析
你当前的代码输出后得到:
var data = "[{"Mamma":["Papa"]}]";
JS解析时,会把第一个"之后的[当成字符串内容,但紧接着的"Mamma"里的"会被认为是字符串的结束标记,后面的Mamma就成了无意义的标识符,直接触发Uncaught SyntaxError: Unexpected identifier错误。
两种可行的解决方案
方案1:让PHP直接输出合法的JS对象(推荐)
先把存储的转义JSON解码,再转成JS能直接识别的对象格式:
<?php // 获取存储的转义JSON $jsonTable = usp_get_meta(false, 'usp-custom-12'); // 解码HTML实体,得到原始JSON字符串 $decodedJson = htmlspecialchars_decode($jsonTable); // 把JSON转成PHP数组/对象,再用json_encode输出合法的JS格式 $jsCompatibleData = json_decode($decodedJson, true); ?> var data = <?php echo json_encode($jsCompatibleData); ?>;
这样最终输出的代码会是:
var data = [{"Mamma":["Papa"]}];
这是完全合法的JS对象,不需要额外解析,直接就能使用。
方案2:在JS中用JSON.parse解析(适合需要保留字符串场景)
如果必须先拿到JSON字符串再解析,要确保字符串里的引号被正确转义:
<?php $jsonTable = usp_get_meta(false, 'usp-custom-12'); $decodedJson = htmlspecialchars_decode($jsonTable); // 转义字符串中的双引号,避免JS解析冲突 $escapedJson = addslashes($decodedJson); ?> var data = JSON.parse('<?php echo $escapedJson; ?>');
最终输出的代码是:
var data = JSON.parse('[{"Mamma":["Papa"]}]');
JS会正确识别这个字符串并解析成对象。
内容的提问来源于stack exchange,提问作者rob.m
相关产品推荐
相关产品推荐

