本文详解为何直接用 `json_encode()` 输出到 “ 会导致 json 解析失败,并提供基于 url 编码/解码的可靠解决方案,确保多维对象数组在 php 与 javascript 间完整、无损传输。
在 Web 开发中,常需将 PHP 后端生成的结构化数据(如对象数组)透传至前端 JavaScript 使用。一个常见做法是借助 元素暂存 JSON 字符串,再由 jQuery 读取并解析。但若处理不当,极易触发 JSON.parse() 报错——例如你遇到的 Uncaught SyntaxError: Expected property name or ‘}’ in JSON at position 2,其根本原因并非 JSON 本身无效,而是 HTML 属性值上下文破坏了 JSON 的原始格式。
? 问题根源:HTML 属性值截断
PHP 的 json_encode($tag_filter_list) 会输出类似:
[{"project28":"deer browse"},{"project28":"regeneration"},{"project29":"recreation"}]
但当你将其直接嵌入 HTML 属性:
<input type="hidden" id="tag_filter_list" value="" />
浏览器解析时会将第一个双引号 ” 视为 value= 属性值的结束符。结果实际渲染为:
立即学习“前端免费学习笔记(深入)”;