
php 变量不能直接写在 json 字符串字面量中,必须先构造 php 数组或对象,再通过 json_encode() 安全转换为 json 字符串,避免语法错误和安全风险。
JSON 是一种独立于语言的数据交换格式,其语法严格遵循标准(如双引号包裹键名和字符串、不支持变量插值),因此像 {"Hi":"Hi $name!"} 这样的写法是非法且无效的——PHP 不会解析其中的 $name,浏览器或 JSON 解析器会将其视为普通文本 "$name!",甚至因引号不匹配而报错。
✅ 正确做法是:先用 PHP 构建关联数组(或对象),再调用 json_encode() 进行序列化。该函数会自动处理字符转义、编码(默认 UTF-8)、类型映射(如 null → null,true → true),确保输出符合 JSON 规范。
例如:
$name = 'Alex';
$array = ['Hi' => "Hi $name!"];
echo json_encode($array);
// 输出:{"Hi":"Hi Alex!"}⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 始终使用 json_encode(),切勿拼接 JSON 字符串(易出错且存在 XSS 风险);
- 若变量含特殊字符(如引号、换行符),json_encode() 会自动转义,无需手动处理;
- 推荐显式指定选项以增强健壮性,例如:json_encode($array, JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);
- 对用户输入数据,务必验证/过滤后再写入数组,防止恶意内容注入(虽 json_encode 本身防注入,但业务逻辑仍需防御)。
总结:JSON 是数据格式,不是模板;PHP 变量注入 JSON 的唯一安全路径是「PHP 数据结构 → json_encode()」,这是兼顾正确性、可维护性与安全性的标准实践。











