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

Laravel控制器中如何原样保存textarea值并解决Curl JSON解析错误?

解决Laravel中textarea值保存与Curl JSON请求问题

一、textarea值保存为带\n\n格式的处理

浏览器提交textarea内容时,换行符默认是\n(部分环境为\r\n),若需将单个换行转换为\n\n(比如模拟段落分隔),可在赋值时手动处理:

// 替换所有换行符为双换行,同时保留原始链接
$message = str_replace(["\r\n", "\n"], "\n\n", $request->message);
$communication->communication_text = $message;
$communication->save();

如果只是想原样保留textarea中的换行符(数据库存储真实\n),直接赋值本身有效,若未达预期可排查:

  • 数据库字段类型:确保字段为TEXT/LONGTEXT,而非VARCHAR(后者会截断或丢失换行)
  • 原始输入获取:若存在自动转义,用$request->raw('message')获取未处理的原始内容

二、Curl JSON POST解析错误的解决

BAD_REQUEST通常因JSON格式不合法导致,硬编码正常说明动态字段存在未正确转义的字符(如换行、引号、斜杠),解决方法:

  1. 使用Laravel自带JSON编码工具自动转义(推荐):
// 构造请求数据
$postData = [
    'content' => $communication->communication_text,
    // 其他字段
];

// 自动处理特殊字符转义,保留中文可加JSON_UNESCAPED_UNICODE参数
$jsonData = json_encode($postData);

// 初始化Curl请求
$ch = curl_init('目标API地址');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Length: ' . strlen($jsonData)
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);
  1. 手动转义(不推荐,易出错):
    若必须手动拼接JSON,需对特殊字符逐一转义:
$escapedContent = addslashes(str_replace(["\n", "\r"], "\\n", $communication->communication_text));
$jsonData = "{\"content\": \"$escapedContent\"}";

关键提醒:永远优先使用json_encode生成JSON字符串,它会严格遵循JSON规范处理所有需要转义的字符,避免手动拼接带来的格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:20:15