request获取参数情况(二)

对于URL后面的参数,request获取情况

不管是什么类型的content-type,url 中?后面的参数都可以通过req.getParameter()、req.getParameterNames()、req.getParameterMap()、req.getParameterValues()获取,并且获得的参数如果+会变为空格,如果参数通过URL编码后变为%2B传递 ,后台接收会变成+。

结论:通过这几个方法获取数据,如果发现+变为空格的现象,代表发请求之前没有进行url参数的编码,必须进行编码才行,这几个方法会进行解码的,如果客户端或者浏览器自动对url参数进行了编码,则不需要手动进行编码处理了。如果是表单提交,参数会自动进行编码的,通过这几个方法获取的参数+不会变为空格,不用处理。

js中三个方法escape,encodeURI,encodeURIComponent有什么区别?

一、escape和它们不是同一类

简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。
编码之后的效果是%XX或者%uXXXX这种形式。
其中 ASCII字母 数字 @*/+ 这几个字符不会被编码,其余的都会。
最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL。

二、最常用的encodeURI和encodeURIComponent

对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。

它们都是编码URL,唯一区别就是编码的字符范围,其中

encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'

encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()'

所以encodeURIComponent比encodeURI编码的范围更大。

实际例子来说,encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。

三、最重要的,什么场合应该用什么方法

1、如果只是编码字符串,不和URL有半毛钱关系,那么用escape。

2、如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。

比如

 encodeURI("http://www.cnblogs.com/season-huang/some other thing");

编码后会变为

"http://www.cnblogs.com/season-huang/some%20other%20thing";

 其中,空格被编码成了%20。但是如果你用了encodeURIComponent,那么结果变为

"http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"

看到了区别吗,连 "/" 都被编码了,整个URL已经没法用了。

 3、当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。

1 var param = "http://www.cnblogs.com/season-huang/"; //param为参数
2 param = encodeURIComponent(param);
3 var url = "http://www.cnblogs.com?next=" + param;
4 console.log(url) //"http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2F"

看到了把,参数中的 "/" 可以编码,如果用encodeURI肯定要出问题,因为后面的/是需要编码的。

转载:https://www.zhihu.com/question/21861899

带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯
原文地址:https://www.cnblogs.com/cainiao-Shun666/p/14662618.html