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

PHP发送JSON格式短信时如何实现换行并避免JSON解析报错

PHP发送JSON格式短信时如何实现换行并避免JSON解析报错

嘿,这个问题我太懂了!你之前直接加\n导致JSON解析报错,是因为手动拼接JSON字符串时没处理好转义规则,我给你两种解决方案,第一种绝对是最优选择,能帮你避开很多坑:

推荐方案:用json_encode自动生成JSON(强烈建议)

手动拼接JSON字符串很容易因为转义、引号等细节出错,不如先构造PHP数组,再用json_encode自动转成符合规范的JSON,它会帮你处理所有需要转义的字符(包括换行),省心又靠谱!

示例代码如下:

// 先创建PHP数组,把短信内容和号码都放进去
$smsData = [
    'message' => "Hi,\nThis is the message", // 这里直接用\n就行,json_encode会自动转义
    'phoneNumbers' => ["phone sender", "phone target"]
];

// 把数组转成标准的JSON字符串
$postFields = json_encode($smsData);

// 然后设置curl的POST参数
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);

这样生成的JSON里,换行符会被自动转成\n,完全符合JSON解析要求,而且代码可读性更高,后续修改内容也更方便。

备选方案:手动拼接JSON时正确转义换行

如果你一定要手动写JSON字符串,那得把换行符写成\\n——因为在PHP的双引号字符串里,\\会被解析成单个\,最终传到JSON里就是合法的\n转义序列。

示例代码:

curl_setopt($ch, CURLOPT_POSTFIELDS, '{ 
    "message": "Hi,\\nThis is the message",
    "phoneNumbers": ["phone sender", "phone target"] 
}');

要是你需要拼接变量的话,也要确保变量里的换行是转义后的:

$messageContent = "Hi,\\nThis is the message";
curl_setopt($ch, CURLOPT_POSTFIELDS, '{ 
    "message": "' . $messageContent . '",
    "phoneNumbers": ["phone sender", "phone target"] 
}');

不过这种方法要注意,如果变量里包含双引号、斜杠等特殊字符,还是会触发JSON解析错误,所以还是优先用第一种方案哦!

为啥之前加\n会报错?

简单说:PHP的双引号字符串里,\n会被解析成实际的换行字符(不是字符串\n),而JSON规范不允许字符串里出现未转义的换行符,所以网关的JSON解析器就报错啦。

备注:内容来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:49:40