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

PHP发送含换行符的JSON格式cURL POST请求的问题求助

问题根因

你当前请求失败是两个错误共同导致的:

  • 手动拼接JSON字符串的转义逻辑不符合要求:PHP双引号包裹的字符串中,\n会被解析为实际的换行符,而JSON规范要求字符串内的换行必须转义为\n字符序列,不能出现原生换行
  • 嵌套在description_key内的双引号没有做双重转义,导致整个POST请求的JSON结构本身非法,接口无法正常解析

最优解决方案(推荐)

不要手动拼接JSON,使用PHP内置的json_encode函数自动处理所有转义逻辑,可100%避免转义错误:

<?php
// 1. 先按原生结构构造请求参数数组
$postData = [
    'key1' => 'value1',
    'key2' => 'value2',
    // 直接写你需要的description_key值即可,不需要额外转义
    'description_key' => "{\n\"inner_text_key1\": \"inner_text_value\"\n}"
];

// 2. 由json_encode自动生成符合规范的JSON字符串,所有换行、引号都会被正确转义
$postFields = json_encode($postData);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://url.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'X-Api-Key: 替换为实际的API_KEY';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
  echo 'Error:' . curl_error($ch);
}
curl_close($ch);

echo '<pre>';
var_dump($result);
echo '</pre>';

手动拼接JSON的修正方案(不推荐)

如果一定要手动拼接,需要对转义字符做双重处理:\n转写为\\n,内部的双引号转写为\\",修正后的POST字段如下:

curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"key1\": \"value1\", \"key2\": \"value2\", \"description_key\": \"{\\n\\\"inner_text_key1\\\": \\\"inner_text_value\\\"\\n}\"}");

你可以把最终生成的请求体字符串打印出来,和CLI下curl命令的-d参数内容对比,二者完全一致即可正常请求。

内容的提问来源于stack exchange,提问作者Bruce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:01