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格式不合法导致,硬编码正常说明动态字段存在未正确转义的字符(如换行、引号、斜杠),解决方法:
- 使用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);
- 手动转义(不推荐,易出错):
若必须手动拼接JSON,需对特殊字符逐一转义:
$escapedContent = addslashes(str_replace(["\n", "\r"], "\\n", $communication->communication_text)); $jsonData = "{\"content\": \"$escapedContent\"}";
关键提醒:永远优先使用json_encode生成JSON字符串,它会严格遵循JSON规范处理所有需要转义的字符,避免手动拼接带来的格式错误。
内容的提问来源于stack exchange,提问作者Hola
相关产品推荐
相关产品推荐

