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。
对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。
它们都是编码URL,唯一区别就是编码的字符范围,其中
encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()'
所以encodeURIComponent比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