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
相关产品推荐
相关产品推荐

