You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:32:28