JSON解析错误(400 Bad Request)主因是请求体含不可见特殊字符(如Unicode空格)、格式不合法或Content-Type未正确设置,需手动重输、工具清理或hexdump排查。

不会直接因“携带 HTML 代码”而报错,但**极大概率触发 400 错误或返回空/无效响应**,根本原因不是 HTML 本身,而是请求构造不合规——尤其是 JSON 格式、字段内容、编码或头信息出问题。
JSON 请求体里混入未转义的 HTML 字符会破坏结构
豆包 API 的 /chat/completions 接口要求请求体是标准 JSON。如果你把含双引号、换行、尖括号的 HTML 片段(如 <div class="msg">Hello</div>)直接拼进 messages.content,又没做 json_encode() 转义,会导致:
- PHP 发出的请求体不是合法 JSON(例如出现未转义的
"或\n),服务端直接返回400 Bad Request - 即使勉强发出去,HTML 中的特殊字符可能被截断、解析失败,导致 content 字段为空或被静默过滤
Content-Type 和请求头缺失或错误会先于内容被拦截
PHP 调用必须显式设置两个关键 Header:
-
Authorization: Bearer sk-xxx(注意大小写、空格、Bearer 后必须有空格) -
Content-Type: application/json(漏掉或写成text/plain会返回415 Unsupported Media Type)
这两个头若任一缺失或格式不对,请求根本到不了内容校验环节,更不会“看到”你传的 HTML。
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
HTML 内容本身需符合语义和长度限制
豆包对 messages.content 没有禁止 HTML 的策略,但实际使用中要注意:
- 单条 message.content 长度建议控制在 8k 字符内;超长可能被截断或触发限流
- 避免在 content 中塞大量无意义标签(如嵌套百层
<div>),部分模型预处理会清理或降权 - 若 HTML 是用户输入,务必先用
htmlspecialchars()或strip_tags()做基础净化,防止 XSS 反射到你自己的前端展示层
PHP7.4 环境下常见踩坑点
PHP7.4 已停止官方支持,但仍在不少系统运行。这个版本对 JSON 处理较严格:
-
json_encode($html_string, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)是安全拼接 HTML 内容的推荐方式 - 不要用
http_build_query()构造请求体——它生成的是application/x-www-form-urlencoded格式,豆包只认 JSON - cURL 必须禁用 stream:
curl_setopt($ch, CURLOPT_HTTPHEADER, [...]); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);



















