application/x-www-form-urlencoded从前端到后台
html <form id="userForm1" enctype="application/x-www-form-urlencoded" method="get" action="http://localhost/pc/enc/t1"> 输入 2+2 2 2 浏览器: http://localhost/pc/enc/t1?name=2%2B2&nick=2+2&pass= 后台 入参 : [Request(GET //localhost:3070/pc/enc/t1?name=2%2B2&nick=2+2&pass=)@298a8a52] request获取: - -------------name:2+2---------------------------- - -------------nick:2 2----------------------------
html:
<form id="userForm2" enctype="application/x-www-form-urlencoded" method="post" action="http://localhost/pc/enc/t2">
输入:
2+2 2 2
浏览器:
http://localhost:3070/pc/enc/t2
后台:
入参 : [Request(POST //localhost:3070/pc/enc/t2)@edf57b2]
- -------------name:2+2----------------------------
- -------------nick:2 2----------------------------
总结:在form表单中编码格式application/x-www-form-urlencoded的时候 get提交 比如参数name=2+2 -》 浏览器会变成name=2%2B2 -》 后台接口获取参数的时候根据编码规则会正常显示2+2
form表单中编码格式application/x-www-form-urlencoded
简而言之(application/x-www-form-urlencoded):
2+2 -》2%2B2 -》 2+2
2 2 -》2+2 -》 2 2
以上描述的就是 从浏览器用户填写提交到浏览器跳转到后台 整个一个闭环结束了,是一个完整的步骤。
而有些情况下我们看到这样的描述 空格变+号 +号变空格 这个又是怎么回事呢?
我遇到的情况是这样的:
1.先说+号变空格 比如:你在浏览器输入 localhost/pc/name=2+2 你会发现你在后台取的时候变成了2 2 其实这个情况和之前是一个的,只是你没有形成我说的一个完整的闭环,如果你想要后台得到的值是2+2,应该怎么做呢?
参考前面的简而言之会发现。 我们应该把浏览器的url变成 localhost/pc/name=2%2B2 这样的话后台取到的就么有问题了,这个加号应用比如token参数中包含+号,那么这个+号是有链接前后字符串的意义的,那么就需要用URLEncoder以下,当然你可以后台编码,也可以前端编码,
这个编码应该是base64,可以先百度看下base64 里面可以还有一些坑 比如前后端编码可能用的工具类实现的细节不一致导致回车符换行符的问题。基础很重要。