使用XMLHttpRequest传参遇含&参数,PHP无法完整接收的求助
解决XMLHttpRequest传参含&符号及JSON格式接收问题
一、处理application/x-www-form-urlencoded格式的参数截断问题
application/x-www-form-urlencoded格式中&是参数分隔符,直接传递含&的title值会被拆分,导致PHP接收不完整。解决核心是对参数值做URL编码:
- 用JavaScript的
encodeURIComponent()方法对title进行编码,将&转成%26,PHP接收时会自动解码还原原始内容。
示例代码:
const title = '标题&包含&多个&符号'; const params = `title=${encodeURIComponent(title)}&status=1`; const xhr = new XMLHttpRequest(); xhr.open('POST', 'handle.php', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(params);
PHP端读取:
$title = $_POST['title']; // 拿到完整的"标题&包含&多个&符号"
二、解决application/json格式PHP接收不到参数的问题
PHP默认不会自动解析application/json格式的请求体到$_POST数组,需要手动读取请求流并解码:
发送端代码
const postData = { title: '标题&包含&多个&符号', author: 'test' }; const xhr = new XMLHttpRequest(); xhr.open('POST', 'handle.php', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(postData));
PHP接收端代码
// 读取原始请求体 $rawData = file_get_contents('php://input'); // 解码为关联数组 $requestData = json_decode($rawData, true); // 检查解码是否成功 if ($requestData) { $title = $requestData['title']; // 拿到完整标题 $author = $requestData['author']; }
内容的提问来源于stack exchange,提问作者Toniq
相关产品推荐
相关产品推荐

