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

如何在JavaScript中转义含单引号的JSON值(PHP传参场景)

解决含单引号的JSON传入JavaScript函数的语法错误问题

这个问题我之前也碰到过!本质是引号冲突搞的鬼——你用单引号包裹onclick的内容,但JSON里的单引号(比如Assassin's里的那个)会被浏览器误判成onclick属性的结束标记,直接打乱了语法结构,所以才抛出Uncaught SyntaxError错误。

方案1:修复内联onclick的输出逻辑

只需要在PHP输出JSON时,用htmlspecialchars对JSON字符串做转义处理,并且指定ENT_QUOTES参数(会同时转义单引号和双引号为HTML实体),就能避免引号冲突。

修改后的PHP代码:

onclick='UserQueries(<?php echo htmlspecialchars(json_encode($askInfoData), ENT_QUOTES); ?>)'

原理:json_encode生成的JSON里的单引号会被转成&#039;,双引号转成&quot;,这样放在单引号包裹的onclick属性里时,浏览器不会把它们当成属性的闭合标记,JS函数能正确接收完整的JSON对象。比如原来报错的Assassin's会被转成Assassin&#039;s,传入UserQueries后,JS解析出来的依然是正确的Assassin's字符串。

方案2:用事件监听+Data属性(更推荐)

内联事件写法容易引发这类引号问题,还不符合“行为与结构分离”的前端最佳实践。更稳妥的做法是把JSON数据存在元素的data-*属性里,然后用JS添加点击事件监听:

PHP端代码:

<button class="query-btn" data-info='<?php echo htmlspecialchars(json_encode($askInfoData), ENT_QUOTES); ?>'>
  触发查询
</button>

JavaScript代码:

// 给所有带query-btn类的元素添加点击事件
document.querySelectorAll('.query-btn').forEach(btn => {
  btn.addEventListener('click', function() {
    // 解析data-info里的JSON数据
    const data = JSON.parse(this.dataset.info);
    console.log(data);
  });
});

这种方式彻底避免了内联事件的引号冲突问题,代码结构也更清晰,后期维护起来更方便。

内容的提问来源于stack exchange,提问作者Nɪsʜᴀɴᴛʜ ॐ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:37:08