本文详解为何直接用json_encode()输出到html隐藏域会导致json解析失败,并提供使用urlencode()与decodeuricomponent()组合方案,确保多维对象数组在php与javascript间完整、安全传输。
在Web开发中,常需将PHP后端构造的复杂数据(如嵌套对象数组)传递至前端JavaScript处理。一个常见做法是借助承载JSON字符串,再由jQuery读取并解析。但若直接使用json_encode()输出到HTML属性值中,极易引发语法错误——正如问题中出现的 Uncaught SyntaxError: Expected property name or ‘}’ in JSON at position 2。
根本原因在于:HTML属性值默认以双引号(”)界定,而json_encode()生成的标准JSON字符串同样使用双引号包裹键名和字符串值。例如:
'deer browse']); ?>
// 输出:{"project28":"deer browse"}
当该结果直接插入value属性时:
HTML解析器会将第一个”之后的内容截断——即value实际只取到 {,后续字符被当作标签属性或文本内容丢弃。因此$(‘#tag_filter_list’).val()返回的只是一个孤立的{,自然无法被JSON.parse()识别。
立即学习“前端免费学习笔记(深入)”;