
本文详解在 php 中构建 facebook messenger api 所需的 json 请求体时,如何安全、准确地将 php 变量(如含换行符的字符串)嵌入双引号包围的 json 字符串中,避免变量未解析、json 格式错误或换行符失效问题。
本文详解在 php 中构建 facebook messenger api 所需的 json 请求体时,如何安全、准确地将 php 变量(如含换行符的字符串)嵌入双引号包围的 json 字符串中,避免变量未解析、json 格式错误或换行符失效问题。
在 PHP 中使用 curl 向 Facebook Graph API 发送消息时,$reply_message 必须是严格符合 JSON 规范的字符串。常见误区是直接在单引号字符串中使用 "$saved1" 或 "${saved1}" —— PHP 不会在单引号字符串中解析变量,导致字面量输出,而非实际值。
正确做法是:使用字符串拼接(concatenation)结合双引号字符串或 heredoc,并对变量内容进行 JSON 安全转义。尤其当 $saved1 包含换行符(
)、引号或特殊字符时,仅靠简单拼接仍可能导致 JSON 无效。
✅ 推荐写法(兼顾可读性与安全性):
// 假设 $saved1 = "123",且希望保留原始换行显示效果(如 "line1
123
line3")
$saved1 = "123";
// 步骤1:构造纯文本内容(支持换行)
$text_content = "line1
{$saved1}
line 3";
// 步骤2:用 json_encode() 自动转义并包裹为合法 JSON 字符串(关键!)
$json_text = json_encode($text_content);
// 步骤3:组装完整 JSON 请求体(注意:整个结构仍需是有效 JSON)
$reply_message = json_encode([
'messaging_type' => 'RESPONSE',
'recipient' => ['id' => '1631126643573991'],
'message' => ['text' => $text_content] // ✅ 直接传入原始字符串,json_encode 会统一处理
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- ❌ 避免手动拼接 JSON 字符串(如
'{"text": "line1 '.$saved1.' line 3"}'),极易因引号、反斜杠或 Unicode 导致解析失败; - ✅ 始终优先使用
json_encode()构建 JSON 数据,它会自动处理转义、编码和格式校验; - ? 若
$saved1来自用户输入或外部源,务必先过滤或验证,防止注入风险; - ? Facebook Messenger 要求
在 JSON 字符串中以\n形式存在(即 JSON 层需双反斜杠),而json_encode()会自动完成此转换; - ? 测试时可用
echo $reply_message; die();查看生成的 JSON 是否合法,再用 JSONLint 验证。
最终调用保持不变:
send_reply($access_token, $reply_message);
通过 json_encode() 构建请求体,不仅解决了变量注入问题,更从根本上保障了 JSON 结构合法性与跨平台兼容性——这是构建健壮 API 集成的必备实践。



















