PHP数组转JavaScript数组遇撇号报错的解决方法
问题原因与修复方案
这个错误的核心是字符串中的单引号引发了JS语法冲突:当你用单引号包裹PHP输出的JSON字符串时,cote d'ivoire里的单引号会提前闭合JS的字符串字面量,剩下的ivoire"]) ?>就成了无效的JS代码,从而抛出Unexpected identifier错误。
举个实际的例子,PHP输出的JSON是:
{"name":"cote d'ivoire"}
到了JS里就变成了:
let json_data = '{"name":"cote d'ivoire"}';
这里d后面的单引号直接截断了前面的字符串,剩下的ivoire"}成了无意义的标识符,自然触发语法错误。
下面是两种可靠的修复方式:
方案1:直接输出JSON作为JS对象(推荐)
JSON本身就是合法的JS对象字面量(只要JSON里没有JS特有的值比如undefined,而json_encode不会生成这类值),完全不需要用JSON.parse,直接让PHP把JSON输出到JS变量里即可:
let data = <?php echo json_encode(["name" => "cote d'ivoire"]) ?>;
PHP最终会输出:
let data = {"name":"cote d'ivoire"};
JS会直接把它解析成对象,既简洁又彻底避免了引号冲突问题。
方案2:转义JSON中的单引号(保留JSON.parse的场景)
如果因为某些场景必须使用JSON.parse,那需要确保JS字符串里的单引号被转义。可以用PHP的json_encode加上JSON_HEX_APOS参数,把单引号转成Unicode转义序列\u0027:
let json_data = '<?php echo json_encode(["name" => "cote d\'ivoire"], JSON_HEX_APOS) ?>'; let data = JSON.parse(json_data);
或者用addslashes函数直接转义单引号:
let json_data = '<?php echo addslashes(json_encode(["name" => "cote d\'ivoire"])) ?>'; let data = JSON.parse(json_data);
这两种方式都会让最终的JS字符串变成合法的格式,JSON.parse就能正常解析了。
内容的提问来源于stack exchange,提问作者Davit Zeynalyan
相关产品推荐
相关产品推荐

