如何在POST请求中发送&等特殊字符?
&之类的特殊字符? 其实这个问题的核心在于,&这类字符在HTTP的表单提交(application/x-www-form-urlencoded格式)里是参数分隔符,直接发送的话,后端会把它当成两个参数的分界,导致你的参数值被截断或者解析错误。下面给你几种靠谱的解决办法:
1. 先做URL编码(百分编码)
这是最通用的标准做法,把特殊字符转换成对应的百分编码格式:
&对应%26- 其他常见特殊字符比如
=是%3D,+是%2B
举个例子,如果你的参数是content=hello&world,编码后就变成content=hello%26world,这样后端收到后会自动解码,正确拿到hello&world这个值。
不管你是用HTML表单、AJAX还是后端代码发送POST请求,都可以先对参数值做这个编码处理,大部分编程语言和前端框架都有现成的工具函数,比如JS里的encodeURIComponent(),Python里的urllib.parse.quote()。
2. 使用multipart/form-data格式提交
如果是表单提交或者需要上传文件的场景,直接把请求的编码类型设为multipart/form-data就不用手动编码特殊字符了。这种格式会用一个随机生成的边界字符串来分隔各个参数,每个参数的内容都是独立的,不会被当成分隔符解析。
比如HTML里这么写:
<form method="POST" enctype="multipart/form-data"> <input name="content" value="hello&world"> <button type="submit">提交</button> </form>
AJAX里用FormData对象也能自动处理这种格式:
const formData = new FormData(); formData.append('content', 'hello&world'); fetch('/api/submit', { method: 'POST', body: formData });
3. 发送JSON格式的请求体
如果是REST API的场景,干脆把请求体改成JSON格式,这时候特殊字符完全不需要额外处理——JSON本身就支持包含这些字符的字符串。只要把请求头的Content-Type设为application/json,然后把数据转成JSON字符串发送就行。
比如JS里的例子:
fetch('/api/submit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ content: 'hello&world' }) });
后端只要正确解析JSON请求体,就能直接拿到包含&的参数值。
最后提醒一句:不管用哪种方法,后端都要对应做正确的解析处理——比如用URL编码的话,后端框架一般会自动解码;用JSON的话,要确保后端开启了JSON解析的支持。
内容的提问来源于stack exchange,提问作者Dmitry Khotinskiy

