• 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

    带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯
  • 相关阅读:
    《mysql必知必会》学习_第23章_20180809
    禁止电脑自动乱装流氓软件
    网络地址转换技术NAT
    闲置手机作电脑无线音箱
    TransMac工具制作MacOS启动U盘
    制作MacOS启动U盘
    解决centos7启动后出现Warning: dracut-initqueue timeout‘ at startup进入emergency mode的问题
    思科 锐捷命令行简介
    VRRP 虚拟网关冗余协议
    STP 生成树协议
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/14662618.html
Copyright © 2020-2023  润新知