根本原因是Node.js默认发送application/json或原始流,而PHP仅在Content-Type为x-www-form-urlencoded或multipart/form-data时自动解析到$_POST;需统一格式、编码与请求头。
Node.js 发送 POST 数据时 PHP 读不到 $_POST
根本原因不是“PHP 没收到”,而是 Node.js 默认发的是 application/json 或原始二进制流,而 PHP 只在 Content-Type: application/x-www-form-urlencoded 或 multipart/form-data 时自动解析进 $_POST 数组。
实操建议:
- 如果 Node.js 用
axios.post(url, { key: 'val' }),默认发 JSON —— PHP 端得用file_get_contents('php://input')手动读,$_POST为空 - 想让 PHP 自动填
$_POST,Node.js 必须发 URL 编码格式:key=val&key2=val2,并显式设置Content-Type: application/x-www-form-urlencoded - 用
querystring.stringify({ key: '中文' })处理值,它会自动encodeURIComponent,避免 PHP 端$_POST乱码或截断
中文参数在 PHP 里变问号或空字符串
本质是编码链断裂:Node.js 发送时没编码、HTTP 传输没声明编码、PHP 解析时没按 UTF-8 处理。
关键检查点:
立即学习“PHP免费学习笔记(深入)”;