PHP json_encode转JS变量报错:Uncaught SyntaxError: Unexpected token ';'
解决Uncaught SyntaxError: Unexpected token ';'问题
看起来你遇到的这个Unexpected token ';'错误,根源几乎可以肯定是**textContent字段里包含了JS语法敏感的特殊字符**(比如换行符、未转义的双引号、回车符这类),直接把json_encode的结果输出到JS变量时,破坏了JS的语法结构。我来帮你一步步排查和解决:
1. 先确认问题出在哪
首先你可以先检查json_encode是否生成了有效的JSON,以及返回的内容里有没有“捣乱”的特殊字符:
$jsonAllTextFood = json_encode($allText); // 先检查JSON编码是否失败 if(json_last_error() !== JSON_ERROR_NONE) { die('JSON编码出错啦: ' . json_last_error_msg()); } // 把JSON内容格式化输出看看(测试用,上线记得删掉) echo '<pre>' . htmlspecialchars($jsonAllTextFood) . '</pre>';
如果看到JSON里有换行(比如"textContent": "Hello\nWorld"或者直接显示换行)、未转义的双引号,那这就是问题所在——JS会把换行当成语句结束的标志,自然就抛出语法错误了。
2. 两种修复方案任选一种
方案一:让json_encode帮你转义特殊字符
给json_encode加上几个参数,把JS敏感的字符转成十六进制形式,这样JS就能安全解析了:
$jsonAllTextFood = json_encode($allText, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
这些参数会把双引号、单引号、HTML标签等都转成JS能识别的安全格式,不会破坏语法。
方案二:输出时用htmlspecialchars包裹
在把JSON输出到JS变量的时候,用htmlspecialchars处理一下,直接转义特殊字符:
var allFoodTextInfo = <?php echo htmlspecialchars($jsonAllTextFood, ENT_QUOTES, 'UTF-8'); ?>;
ENT_QUOTES这个参数会同时转义单引号和双引号,不管你的文本里有哪种引号,都不会搞砸JS的变量赋值。
3. 额外的排查点
如果上面的方法还不行,你可以再检查这两点:
- 看看
CousineTextInfoFormat类的属性值有没有非UTF-8编码的内容,json_encode只认UTF-8,非UTF-8的内容会导致编码失败或者生成无效JSON。 - 对比一下
getAllFoodPrograms返回的数据结构,确认getAllTextFood返回的对象里有没有循环引用(不过你说逻辑类似,这个概率不大)。
按照上面的步骤处理后,allFoodTextInfo应该就能被JS正常解析啦。
内容的提问来源于stack exchange,提问作者Mrjoker
相关产品推荐
相关产品推荐

