精华内容
下载资源
问答
  • URL中传递中文的解决方式

    万次阅读 2018-10-30 17:28:55
    URL中传递中文的解决方式 2015年05月13日 17:13:55 thinkinglink 阅读数:10321 标签: URL编码中文编码乱码解决 更多 个人分类: web前端 在URL中传递中文的解决方式 1.第一种方式,主要是通过配置搞定...

    在URL中传递中文的解决方式

    2015年05月13日 17:13:55 thinkinglink 阅读数:10321 标签: URL编码中文编码乱码解决 更多

    个人分类: web前端

    在URL中传递中文的解决方式

    1.第一种方式,主要是通过配置搞定 
    1.1)在服务器端设置 
    (1)在tomcat的配置文件中指定编码 
    server.xml文件中指定:URIEncoding=”UTF-8”

    <Connector connectionTimeout="20000" port="8080" 
                    protocol="HTTP/1.1" redirectPort="8443" 
                    useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
    • 1
    • 2
    • 3

    URIEncoding告诉服务器servlet解码URL时采用的编码; 
    useBodyEncodingForURI 告诉服务器解码URL时候需要采用request body指定的编码

    (2)在weblogic服务器的配置文件中指定编码 
    weblogic.xml 文件中指定UTF-8

        <input-charset> 
            <java-charset-name>UTF-8</java-charset-name> 
        </input-charset>    
    
    • 1
    • 2
    • 3

    1.2)在浏览器端设置 
    在页面设置文件的编码和保存格式UTF-8 
    在页面头设置:pageEncoding=”UTF-8” contentType=”text/html; charset=UTF-8” 
    在HtmL中的meta设置:

            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    • 1

    这样设置后,满足在主流浏览器:chrome、firefox等浏览器URL中带有中文的请求自动转码问题, 
    不需要额外在后台代码里进行手动转码。 
    但是,对独树一帜的IE大浏览器仍旧不起效果,会出现令人头疼的乱码问题。解决方案看第3步了

    1.3)在前端用js对URL进行编码后再发送请求(仅仅只是为了兼容IE) 
    var srcUrl = _contextEbtPath + “/dic/index?condition=我是中文查询条件撒”; 
    var encodeUrl = encodeURI(srcUrl); 
    这样编码一次后,也不会影响其他主流浏览器的编码转换问题,得到彻底解决。

    2.第二种也是最直接的方式,用硬编码解决 
    直接在后台请求处理前,手动进行一次转码。 
    缺点是凡是有中文请求URL的都需要硬编码一次,优点是直接明了。

    condition = new String(condition.getBytes("iso8859-1"),"utf-8"); 
    • 1

    3.相关知识延伸阅读 
    3.1)在URL中中文字符通常出现在以下两个地方: 
    http://localhost:8080/example/中 国 name=中国 
    (1)Query String中的参数值,比如 keywords=中国 
    (2)servlet path,比如: /中 国 
    3.2)出现乱码问题的原因主要是以下几方面: 
    (1)浏览器:我们的客户端(浏览器)本身并没有遵循URI编码的规范。 
    (2)Servlet服务器:Servlet服务器的没有正确配置。 
    3.3)相关知识:http请求的几个环节 
    浏览器(ie firefox)—————–>Servlet服务器 ——————–>浏览器显示 
    <编码> < 解码成unicode,然后将显示的内容编码> <解码> 
    (1)浏览器把URL(以及post提交的内容)经过编码后发送给服务器。 
    (2)这里的Servlet服务器实际上指的是由Servlet服务器提供的servlet实现ServletRequestWrapper, 
    不同应用服务器的 servlet实现不同,这些servlet的实现把这些内容解码转换为unicode, 
    处理完毕后,然后再把结果(即网页)编码返回给浏览器。 
    (3)浏览器按照指定的编码显示该网页。 
    注意: 
    当对字符串进行编码和解码的时候都涉及到字符集,通常使用的字符集为ISO8859-1、GBK、UTF-8、UNICODE。 
    3.4)相关知识:URL的组成及说明 
    域名:端口/contextPath/servletPath/pathInfo queryString 
    (1)contextPath是在Servlet服务器的配置文件中指定的 
    (a)对于weblogic:contextPath是在应用 的weblogic.xml中配置。

    <context-root>/</context-root> 
    • 1

    (b)对于tomcat:contextPath是在server.xml中配置。

    <Context path="/" docBase="D:/server/blog.war" debug="5" reloadable="true" crossContext="true"/>
    • 1

    (c)对于jboos: contextPath是在应用的jboss-web.xml中配置

    <jboss-web> 
            <context-root>/</context-root> 
    </jboss-web>
    • 1
    • 2
    • 3

    (2)servletPath是在应用的web.xml中配置

    <servlet-mapping> 
        <servlet-name>Example</servlet-name> 
        <url-pattern>/example/*</url-pattern> 
    </servlet-mapping> 
    • 1
    • 2
    • 3
    • 4

    3.5)相关知识:Servlet获取URL的值及参数 API 
    (1)获得 queryString的参数值(来自于GET和POST),其值经过Servlet服务器URL Decode 过的 
    request.getParameter(“name”); 
    (2)获取 pathinfo 信息,返回的字符串是经过Servlet服务器URL Decode过的 
    request.getPathInfo(); 
    (3)获取 requestURI 浏览器提交过来的原始数据,未被Servlet服务器URL Decode过。 
    requestURI = request.getRequestURI();

    3.6)相关知识:servlet规范(开发人员必须清楚的servlet规范:) 
    (1) HttpServletRequest.setCharacterEncoding()方法 仅仅只适用于设置post提交的request body的编码而不是设置get方法提交的queryString的编码。 
    该方法告诉应用服务器应该采用什么编码解析post传过来的内容。很多文章并没有说明这一点。 
    (2) HttpServletRequest.getPathInfo()返回的结果是由Servlet服务器解码(decode)过的。 
    (3) HttpServletRequest.getRequestURI()返回的字符串没有被Servlet服务器decoded过。 
    (4) POST提交的数据是作为request body的一部分。 
    (5) 网页的Http头中ContentType(“text/html; charset=GBK”)的作用: 
    (a) 告诉浏览器网页中数据是什么编码; 
    (b) 表单提交时,通常浏览器会根据ContentType指定的charset对表单中的数据编码,然后发送给服务器的。 
    这里需要注意的是:这里所说的ContentType是指http头的ContentType,而不是在网页中meta中的ContentType。 
    3.7)浏览器和服务器对编码的解析 
    URL:http://localhost:8080/example/中 国 name=中国 
    汉字   编码    二进制表示 
    中国   UTF-8    0xe4 0xb8 0xad 0xe5 0x9b 0xbd[-28, -72, -83, -27, -101, -67] 
    中国   GBK     0xd6 0xd0 0xb9 0xfa[-42, -48, -71, -6] 
    中国   ISO8859-1 0x3f,0x3f[63, 63]信息失去 
    3.7.1)浏览器发送请求时的编码 
    <1>GET方式提交,浏览器会对URL进行URL encode,然后发送给服务器。 
    (a)对于中文IE,如果在高级选项中选中总以UTF-8发送(默认方式),则PathInfo是URL Encode是按照UTF-8编码,QueryString是按照GBK编码。 
    http://localhost:8080/example/中 国 name=中国 
    实际上提交是:GET /example/%E4%B8%AD%E5%9B%BD name=%D6%D0%B9%FA 
    (b)对于中文IE,如果在高级选项中取消总以UTF-8发送,则PathInfo和QueryString是URL encode按照GBK编码。 
    实际上提交是:GET /example/%D6%D0%B9%FA name=%D6%D0%B9%FA 
    (c)对于中文firefox,则pathInfo和queryString都是URL encode按照GBK编码。 
    实际上提交是:GET /example/%D6%D0%B9%FA name=%D6%D0%B9%FA 
    很显然,不同的浏览器以及同一浏览器的不同设置,会影响最终URL中PathInfo的编码。 
    对于中文的IE和FIREFOX都是采用GBK编码 QueryString。 
    小结,解决方案: 
    (a)**URL中如果含有中文等非ASCII字符,则浏览器会对它们进行URLEncode。为了避免浏览器采用了我们不希望的编码, 
    所以最好不要在URL中直接使用非ASCII字符,而采用URL Encode编码过的字符串%.** 
    比如:URL:http://localhost:8080 /example/中国 name=中国 
    建议:URL:http://localhost:8080/example/%D6%D0 %B9%FA name=%D6%D0%B9%FA 
    (b)我们建议URL中PathInfo和QueryString采用相同的编码,这样对服务器端处理的时候会更加简单。 
    <2>POST方式提交 
    对于POST方式,表单中的参数值对是通过request body发送给服务器,**此时浏览器会根据网页的ContentType(“text/html; charset=GBK”) 
    中指定的编码进行对表单中的数据进行编码**,然后发给服务器。 
    在服务器端的程序中我们可以通过 Request.setCharacterEncoding() 设置编码,然后通过request.getParameter获得正确的数据。 
    解决方案: 
    从最简单,所需代价最小来看,我们对URL以及网页中的编码使用统一的编码对我们来说是比较合适的。 
    如果不使用统一编码的话,我们就需要在程序中做一些编码转换的事情。这也是我们为什么看到有网络上大量的资料介绍如何对乱码进行处理, 
    其中很多解决方案都只是一时的权宜之计,没有从根本上解决问题。

    3.7.2)Servlet服务器 
    Servlet服务器实现的Servlet遇到URL和POST提交的数据中含有%的字符串,它会按照指定的字符集解码。 
    下面两个Servlet方法返回 的结果都是经过解码的: 
    request.getParameter(“name”); 
    request.getPathInfo(); 
    这里所说的”指定的字符集”是在应用服务器的配置文件中配置。 
    (1) tomcat服务器 
    对于tomcat服务器,该文件是server.xml

    <Connector port="8080" protocol="HTTP/1.1" 
                    maxThreads="150" connectionTimeout="20000" 
                    redirectPort="8443" URIEncoding="GBK"/> 
    • 1
    • 2
    • 3

    URIEncoding告诉服务器servlet解码URL时采用的编码。

    <Connector port="8080" ... useBodyEncodingForURI="true" /> 
    • 1

    useBodyEncodingForURI 告诉服务器解码URL时候需要采用request body指定的编码。

    (2) weblogic服务器 
    对于weblogic服务器,该文件是weblogic.xml

    <input-charset> 
        <java-charset-name>GBK</java-charset-name> 
    </input-charset> 
    • 1
    • 2
    • 3

    3.7.3)浏览器显示 
    浏览器根据http头中的ContentType(“text/html; charset=GBK”),指定的字符集来解码服务器发送过来的字节流。 
    我们可以调用 HttpServletResponse.setContentType()设置http头的ContentType。

    总结: 
    (1)URL中的PathInfo和QueryString字符串的编码和解码是由浏览器和应用服务器的配置决定的, 
    我们的程序不能设置,不要期望用request.setCharacterEncoding()方法能设置URL中参数值解码时的字符集。 
    所以我们建议URL中不要使用中文等非ASCII字符,如果含有非ASCII字符的话要使用URLEncode编码一下,比如: 
    http://localhost:8080 /example1/example/中国 
    正确的写法: 
    http://localhost:8080/example1/example/%E4%B8%AD%E5%9B%BD 
    并且我们建议URL中不要在PathInfo和QueryString同时使用非ASCII字符,比如 
    http://localhost:8080 /example1/example/中国 name=中国 
    原因很简单:不同浏览器对URL中PathInfo和QueryString编码时采 用的字符集不同,但应用服务器对URL通常会 
    采用相同的字符集来解码。

    (2)我们建议URL中的URL Encode编码的字符集和网页的contentType的字符集采用相同的字符集,这样程序的实现就很简单, 
    不用做复杂的编码转换。 JS中对中文(UTF-8格式保存的)进行编码(unicode编码)的函数常用有:encodeURI(str); encodeURIComponent(str);

    展开全文
  • 网址URL中特殊字符转义编码

    千次阅读 2018-07-27 20:45:42
    原文:https://blog.csdn.net/pcyph/article/details/45010609 网址URL中特殊字符转义编码 字符 - URL编码值 空格 - %20 " - %22 # - %23 % - %25 &amp; - %26 ( - ...

    原文:https://blog.csdn.net/pcyph/article/details/45010609

    网址URL中特殊字符转义编码

    字符    -    URL编码值

    空格    -    %20
    "          -    %22
    #         -    %23
    %        -    %25
    &         -    %26
    (          -    %28
    )          -    %29
    +         -    %2B
    ,          -    %2C
    /          -    %2F
    :          -    %3A
    ;          -    %3B
    <         -    %3C
    =         -    %3D
    >         -    %3E
    ?         -    %3F
    @       -    %40
    \          -    %5C
    |          -    %7C 

    URL特殊字符转义,URL中一些字符的特殊含义,基本编码规则如下:

    1、空格换成加号(+)
    2、正斜杠(/)分隔目录和子目录
    3、问号(?)分隔URL和查询
    4、百分号(%)制定特殊字符
    5、#号指定书签
    6、&号分隔参数
     

    如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值
    +     %2B
    /      %2F
    ?     %3F
    %    %25
    #     %23
    &    %26

     

    ######################################################################

     

    http://www.imkevinyang.com/2009/08/%E8%AF%A6%E8%A7%A3javascript%E4%B8%AD%E7%9A%84url%E7%BC%96%E8%A7%A3%E7%A0%81.html

     

     

     

     

     

    摘要

    本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码、为什么需要编码做了详细的说明,并对比分析了Javascript 中和编解码相关的几对函数escape / unescape,encodeURI / decodeURI和encodeURIComponent / decodeURIComponent。

    预备知识

       foo://example.com:8042/over/there?name=ferret#nose  
       \_/  \______________/ \________/\_________/ \__/ 
         |                 |                        |                    |             |
    scheme     authority               path             query      fragment

    URI是统一资源标识的意思,通常我们所说的Url只是URI的一种。典型Url的格式如上面所示。下面提到的Url编码,实际上应该指的是URI编码。

    为什么需要Url编码

    通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义

    例如Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc& ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和= 符号进行转义,也就是对其进行编码。

    又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。

    Url编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。

    哪些字符需要编码

    RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

    RFC3986文档对Url的编解码问题做出了详细的建议,指出了哪些字符需要被编码才不会引起Url语义的转变,以及对为什么这些字符需要编码做出了相应的解释。

    US-ASCII字符集中没有对应的可打印字符

    Url中只允许使用可打印字符。US-ASCII码中的10-7F字节全都表示控制字符,这些字符都不能直接出现在Url中。同时,对于80-FF字节(ISO-8859-1),由于已经超出了US-ACII定义的字节范围,因此也不可以放在Url中。

    保留字符

    Url可以划分成若干个组件,协议、主机、路径等。有一些字符(:/?#[]@)是用作分隔不同组件的。例如:冒号用于分隔协议和主机,/用于分隔 主机和路径,?用于分隔路径和查询参数,等等。还有一些字符(!$&'()*+,;=)用于在每个组件中起到分隔作用的,如=用于表示查询参数中 的键值对,&符号用于分隔查询多个键值对。当组件中的普通数据包含这些特殊字符时,需要对其进行编码。

    RFC3986中指定了以下字符为保留字符:

    !*'();:@&=+$,/?#[]

    不安全字符

    还有一些字符,当他们直接放在Url中的时候,可能会引起解析程序的歧义。这些字符被视为不安全字符,原因有很多。

    空格Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉
    引号以及<>引号和尖括号通常用于在普通文本中起到分隔Url的作用
    #通常用于表示书签或者锚点
    %百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
    {}|\^[]`~某一些网关或者传输代理会篡改这些字符

     

    需要注意的是,对于Url中的合法字符,编码和不编码是等价的,但是对于上面提到的 这些字符,如果不经过编码,那么它们有可能会造成Url语义的不同。因此对于Url而言,只有普通英文字符和数字,特殊字符$-_.+!*'()还有保留 字符,才能出现在未经编码的Url之中。其他字符均需要经过编码之后才能出现在Url中。

    但是由于历史原因,目前尚存在一些不标准的编码实现。例如对于~符号,虽然RFC3986文档规定,对于波浪符号~,不需要进行Url编码,但是还是有很多老的网关或者传输代理会

    如何对Url中的非法字符进行编码

    Url编码通常也被称为百分号编码(Url Encoding,also known as percent-encoding),是因为它的编码方式非常简单,使用%百分号加上两位的字符——0123456789ABCDEF——代表一个字节的 十六进制形式。Url编码默认使用的字符集是US-ASCII。例如a在US-ASCII码中对应的字节是0x61,那么Url编码之后得到的就 是%61,我们在地址栏上输入http://g.cn/search?q=%61%62%63,实际上就等同于在google上搜索abc了。又如@符号 在ASCII字符集中对应的字节为0x40,经过Url编码之后得到的是%40。

    常见字符的Url编码列表:

    保留字符的Url编码
    !*"'();:@&
    %21%2A%22%27%28%29%3B%3A%40%26
    =+$,/?%#[]
    %3D%2B%24%2C%2F%3F%25%23%5B%5D

    对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。 对于Unicode字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。如“中文”使用UTF-8字符集得到 的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到“%E4%B8%AD%E6%96%87”。

    如果某个字节对应着ASCII字符集中的某个非保留字符,则此字节无需使用百分号表示。 例如“Url编码”,使用UTF-8编码得到的字节是0x55 0x72 0x6C 0xE7 0xBC 0x96 0xE7 0xA0 0x81,由于前三个字节对应着ASCII中的非保留字符“Url”,因此这三个字节可以用非保留字符“Url”表示。最终的Url编码可以简化成 “Url%E7%BC%96%E7%A0%81” ,当然,如果你用"%55%72%6C%E7%BC%96%E7%A0%81”也是可以的。

    由于历史的原因,有一些Url编码实现并不完全遵循这样的原则,下面会提到。

    Javascript中的escape,encodeURI和encodeURIComponent的区别

    Javascript中提供了3对函数用来对Url编码以得到合法的Url,它们分别是escape / unescape,encodeURI / decodeURI和encodeURIComponent / decodeURIComponent。由于解码和编码的过程是可逆的,因此这里只解释编码的过程。

    这三个编码的函数——escape,encodeURI,encodeURIComponent——都是用于将不安全不合法的Url字符转换为合法的Url字符表示,它们有以下几个不同点。

    安全字符不同

    下面的表格列出了这三个函数的安全字符(即函数不会对这些字符进行编码)

     安全字符
    escape(69个)*/@+-._0-9a-zA-Z
    encodeURI(82个)!#$&'()*+,/:;=?@-._~0-9a-zA-Z
    encodeURIComponent(71个)!'()*-._~0-9a-zA-Z

    兼容性不同

    escape函数是从Javascript1.0的时候就存在了,其他两个函数是在Javascript1.5才引入的。但是由于 Javascript1.5已经非常普及了,所以实际上使用encodeURI和encodeURIComponent并不会有什么兼容性问题。

    对Unicode字符的编码方式不同

    这三个函数对于ASCII字符的编码方式相同,均是使用百分号+两位十六进制字符来表示。但是对于Unicode字符,escape的编码方式是%uxxxx,其中的xxxx是用来表示unicode字符的4位十六进制字符。这种方式已经被W3C废弃了。但是在ECMA-262标准中仍然保留着escape的这种编码语法。encodeURI和encodeURIComponent则使用UTF-8对非ASCII字符进行编码,然后再进行百分号编码。这是RFC推荐的。因此建议尽可能的使用这两个函数替代escape进行编码。

    适用场合不同

    encodeURI被用作对一个完整的URI进行编码,而encodeURIComponent被用作对URI的一个组件进行编码。

    从上面提到的安全字符范围表格来看,我们会发现,encodeURIComponent编码的字符范围要比encodeURI的大。我们上面提到 过,保留字符一般是用来分隔URI组件(一个URI可以被切割成多个组件,参考预备知识一节)或者子组件(如URI中查询参数的分隔符),如:号用于分隔 scheme和主机,?号用于分隔主机和路径。由于encodeURI操纵的对象是一个完整的的URI,这些字符在URI中本来就有特殊用途,因此这些保 留字符不会被encodeURI编码,否则意义就变了。

    组件内部有自己的数据表示格式,但是这些数据内部不能包含有分隔组件的保留字符,否则就会导致整个URI中组件的分隔混乱。因此对于单个组件使用encodeURIComponent,需要编码的字符就更多了。

    表单提交

    当Html的表单被提交时,每个表单域都会被Url编码之后才在被发送。由于历史的原因,表单使用的Url编码实现并不符合最新的标准。例如对于空 格使用的编码并不是%20,而是+号,如果表单使用的是Post方法提交的,我们可以在HTTP头中看到有一个Content-Type的header, 值为application/x-www-form-urlencoded。大部分应用程序均能处理这种非标准实现的Url编码,但是在客户端 Javascript中,并没有一个函数能够将+号解码成空格,只能自己写转换函数。还有,对于非ASCII字符,使用的编码字符集取决于当前文档使用的 字符集。例如我们在Html头部加上

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

    这样浏览器就会使用gb2312去渲染此文档(注意,当HTML文档中没有设置此meta标签,则浏览器会根据当前用户喜好去自动选择字符集,用户也可以强制当前网站使用某个指定的字符集)。当提交表单时,Url编码使用的字符集就是gb2312。

    文档字符集会影响encodeURI吗?

    之前在使用Aptana(为什么专指aptana下面会提到)遇到一个很迷惑的问题,就是在使用encodeURI的时候,发现它编码得到的结果和我想的很不一样。下面是我的示例代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">     <head>         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />     </head>     <body>         <script type="text/javascript">             document.write(encodeURI("中文"));         </script>     </body> </html>    

    运行结果输出%E6%B6%93%EE%85%9F%E6%9E%83。显然这并不是使用UTF-8字符集进行Url编码得到的结果(在Google上搜索“中文”,Url中显示的是%E4%B8%AD%E6%96%87)。

    所以我当时就很质疑,难道encodeURI还跟页面编码有关,但是我发现,正常情况下,如果你使用gb2312进行Url编码也不会得到这个结果的才是。后来终于被我发现,原来是页面文件存储使用的字符集和Meta标签中指定的字符集不一致导致的问题。 Aptana的编辑器默认情况下使用UTF-8字符集。也就是说这个文件实际存储的时候使用的是UTF-8字符集。但是由于Meta标签中指定了 gb2312,这个时候,浏览器就会按照gb2312去解析这个文档,那么自然在“中文”这个字符串这里就会出错,因为“中文”字符串用UTF-8编码过 后得到的字节是0xE4 0xB8 0xAD 0xE6 0x96 0x87,这6个字节又被浏览器拿gb2312去解码,那么就会得到另外三个汉字“涓枃”(GBK中一个汉字占两个字节),这三个汉字在传入 encodeURI函数之后得到的结果就是%E6%B6%93%EE%85%9F%E6%9E%83。因此,encodeURI使用的还是UTF-8,并 不会受到页面字符集的影响。

    其他和Url编码相关的问题

    对于包含中文的Url的处理问题,不同浏览器有不同的表现。例如对于IE,如果你勾选了高级设置“总是以UTF-8发送Url”,那么Url中的路 径部分的中文会使用UTF-8进行Url编码之后发送给服务端,而查询参数中的中文部分使用系统默认字符集进行Url编码。为了保证最大互操作性,建议所 有放到Url中的组件全部显式指定某个字符集进行Url编码,而不依赖于浏览器的默认实现。

    另外,很多HTTP监视工具或者浏览器地址栏等在显示Url的时候会自动将Url进行一次解码(使用UTF-8字符集),这就是为什么当你在 Firefox中访问Google搜索中文的时候,地址栏显示的Url包含中文的缘故。但实际上发送给服务端的原始Url还是经过编码的。你可以在地址栏 上使用Javascript访问location.href就可以看出来了。在研究Url编解码的时候千万别被这些假象给迷惑了。

    展开全文
  • 删除url中某个参数

    千次阅读 2019-11-04 19:30:29
    这里的url 是指一个网站链接 例如: https://baidu.com?a=1&b=2 下面看一下封装的代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src=...

    这里的url 是指一个网站链接

    例如: https://baidu.com?a=1&b=2

    下面看一下封装的代码

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    	</head>
    
    	<body>
    		<div id="aaaa">
    			
    		</div>
    		<script>
    			var funcUrlDel = function(name) {
    			  var loca = window.location;
    			  var baseUrl = loca.origin + loca.pathname + "?";
    			  console.log('loca.hash',loca)
    			  var query = decodeURIComponent(loca.search.split('?')[1]);
    			  if(!query){
    				return loca
    			  }
    			  if (loca.href.indexOf(name) > -1) {
    				var obj = {}
    			  console.log('query',query)
    				var arr = query.indexOf('&')>-1?query.split("&"):[query];
    				for (var i = 0; i < arr.length; i++) {
    				  arr[i] = arr[i].split("=");
    				  obj[arr[i][0]] = arr[i][1];
    				};
    				delete obj[name];
    				var url = baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&");
    				return url
    			  };
    			}
    			document.getElementById('aaaa').innerHTML=funcUrlDel('c')
    		</script>
    	</body>
    </html>
    

    使用方法: 首先,你要删除的参数,得在你的链接里面存在。如果不存在的话,就会返回原来的路径

    看效果图:

     

    二:在VUE中的删除URL路径中的参数。

    为什么要在VUE单独写一个,因为VUE的路径有 #/ ,比较操蛋, 例如:http://laa.ein.cn:8080/#/?a=1&v=1.1.121123114

    下面直接上VUE的代码

    // 删除url中某个参数
        _this.prototype.funcUrlDel = function(name) {
          var loca = window.location;
          var baseUrl = loca.origin + loca.pathname + "?";
          var query = decodeURIComponent(loca.hash.split('?')[1]);
          if(!query){
            return loca
          }
          if (loca.href.indexOf(name) > -1) {
            var obj = {}
          console.log('query',query)
            var arr = query.indexOf('&')>-1?query.split("&"):[query];
            for (var i = 0; i < arr.length; i++) {
              arr[i] = arr[i].split("=");
              obj[arr[i][0]] = arr[i][1];
            };
            delete obj[name];
            var url = loca.origin+'/#/?' + JSON.stringify(obj).replace(/[\"\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&");
            console.log('uuuuuuu',url)
            return url
          };
        }

     

    展开全文
  • ios url中含有中文问题

    千次阅读 2018-10-19 10:56:02
    1 使用 stringByAddingPercentEncodingWithAllowedCharacters ...NSURL *url = [NSURL URLWithString:[valueString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCh...

    1 使用 stringByAddingPercentEncodingWithAllowedCharacters

    例如:使用方法

    NSURL *url = [NSURL URLWithString:[valueString
    stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet
    URLFragmentAllowedCharacterSet]]];

    2 使用 stringByAddingPercentEscapesUsingEncoding

    例如:使用方法

    [valueString
    stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

       注意 在ios9.0 之后 方法2 被遗弃了 ;建议使用方法1
    
    展开全文
  • js解决url中文乱码问题

    万次阅读 2019-02-19 17:02:10
    在日常开发当中,我们可能遇到要将某个页面的参数通过url链接拼接的方式传递到另一个页面当中,在另一个页面当中进行使用,如果传输过去的是中文,那么可能会遇到中文乱码问题,那么该如何来解决呢?     ...
  • URL中中文转码和解码

    千次阅读 2018-11-30 12:08:02
    如果我们需要爬虫的时候也是一样,我们需要给浏览器传过去的也是对url中的中文进行转码之后的url地址,否则在url中的关键字直接出现中文会有问题。在python3的环境中的urllib库中 quote模块 提供了这一功能 一、URL...
  • URL中参数值带有中文的解决方案

    万次阅读 2018-05-29 15:48:58
    在项目中,总是难以避免url中带中文的情况. 后台生成的Url中带有中文: 则中文值应该用URLEncoder.encode进行编码 serviceName = URLEncoder.encode(serviceName,"utf-8"); private String ...
  • 隐藏URL中的参数

    千次阅读 2019-06-21 18:09:25
    最近有个项目进入到收尾阶段,有个需求是不能在URL中显示参数,这个实现起来也不算复杂,有以下方法 如果是Spring的项目,springMVC的配置文件中注解开关中配置"ignoreDefaultModelOnRedirect"变量为true就可以实现...
  • python获取url中的参数【python3】

    千次阅读 2021-05-24 10:47:43
    ps:python2的urlparse包合并到python3的urllib了 四个常用方法如下: 1.url解码 urldata = "https://kns.cnki.net/kcms/detail/detail.aspx?sfield=fn&QueryID=8&CurRec=2&DbCode=%20CJFD&...
  • 本文给大家介绍php解析url并得到url中的参数及获取url参数的四种方式,涉及到将字符串参数变为数组,将参数变为字符串的相关知识,本文代码简单易懂,感兴趣的朋友一起看看吧 下面一段代码是php解析url并得到url中...
  • URL中“#” “?” &“”号的作用

    万次阅读 多人点赞 2018-09-16 23:28:56
    一、URL特殊符号解析 URL无法显示某些特殊符号,这个时候就要使用编码了。编码的格式为:一个百分号,后面跟对应字符的ASCII(16进制)码值。例如,空格的编码值是”%20“。...+ 表示空格(在URL中不能使用空格) ...
  • URL 代表一个统一资源定位...在Java就是使用URL访问网络资源,获取url对象的相关信息。 下面介绍具体是使用 1.构造方法,一般使用较多的就下面这两个,可以参照api http://www.javaweb.cc/help/JavaAPI1.6/i...
  • 部分转自:...   下面是我的项目里的一段代码: 在spring 拦截器preHandle的,对于 /viewarticle?id=3 这样的url,在未登录时,实现登陆后跳转功能时用到 String strRelativePath = request.getSe...
  • URL中文参数错误解决方法

    千次阅读 2019-08-07 15:24:15
    一、错误示例 起因:用eclipse+Tomcat做练习时,使用eclipse自带浏览器访问web项目出现错误,但是用谷歌浏览器正常访问。...对中文进行url编码,对中文进行url编码后的链接如下: http://localhost/test/TomcatT...
  • url中传递参数

    万次阅读 2018-09-14 09:40:13
    url 1.url传递参数 1.非关键字参数 url地址访问格式:/路径/路径/参数 urls正则的定义:/路径/路径/(参数匹配的正则) 注意:1.... 2.如果url中有参数,就必须给视图函数加上...url中: 接收的参数必须与传...
  • iOS 的url中含有中文解决方法

    千次阅读 2018-07-03 15:05:04
    转载自:https://www.jianshu.com/p/ed64b583002c[NSURLURLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求...方法1:NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEn...
  • URL中的#、?、&解释

    万次阅读 多人点赞 2018-10-30 10:03:22
    目录 一、#说明 二、?说明 三、&amp;说明 一、#说明 ... #代表网页的一个位置。...浏览器读取这个URL后,会自动将print位置滚动至可视区域。 为网页位置指定标识符,有两个方法。一是使...
  • url中含有中文解决方法

    千次阅读 2018-08-23 16:09:56
    NSString *urlString = @"此处输入网址"; NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  • 利用url传参时如果url中的参数是中文时因为编码类型不同在页面中获取会出现乱码使用此方法能获取url中的参数值 并解决乱码问题调用时直接GetUrlByParamName("参数名"); function GetUrlByParamName(name)...
  • 关于URL中带空格的问题

    万次阅读 2018-09-03 11:55:57
    URL中的空格有时候被编码成%20,有时候被编码成加号+,曾经迷糊过一段时间,后来查了下资料才搞明白。 一个URL的基本组成部分包括协议(scheme)、 域名、端口号、路径和查询字符串(路径参数和锚点标记就暂不考虑了...
  • 解释之前我们先基于Http协议,根据Http的请求方法对应的数据传输能力把Http请求分为Url类请求和Body类请求,Url类请求包括但不限于GET、HEAD、OPTIONS、TRACE 等请求方法。 Body类请求包括但不限于POST、PUSH、PATCH...
  • Java处理Url中的特殊字符

    千次阅读 2019-01-12 12:15:30
    URL无法显示某些特殊符号,这个时候就要使用编码了。编码的格式为:一个百分号,后面跟对应字符的ASCII...有些字符在URL中具有特殊含义,基本编码规则如下:  特殊含义 十六进制值  1.+ 表示空格(在 URL 中不...
  • 微信小程序中如何获取url中的参数

    万次阅读 2019-06-30 18:55:20
    微信小程序中如何获取url中的参数,通过onLoad中的options参数,方法如下: Page({ onLoad:function(options){ console.log(options); } })
  • URL中拼接多个参数

    千次阅读 2020-07-01 15:18:07
    标题URL中拼接多个参数 方法如下: 比如:URL="www.baidu.com" 我要在后面拼接上东西的话应该在这个URL后面先加上一个? 比如:URL="www.baidu.com?" +“problem”=xxxx 如果多个参数的话:每个参数名前面加上& ...
  • URL中传递参数时包含中文的问题

    万次阅读 2017-11-23 23:13:04
    项目中,在页面之间点击跳转时需要进行参数传递,需要将中文的参数放入到url中进行跳转传参。
  • URL “#” “?” &“”号的作用浅析
  • vue对给url 中文参数 添加编码解码

    千次阅读 2020-08-01 10:22:46
    // 解码用 decodeURIComponent(str) // 编码用 encodeURIComponent(str)
  • url中包含特殊字符处理

    千次阅读 2018-03-09 08:40:14
    url中包含特殊字符要如何处理 不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&amp;,被url处理成分隔符。尤其是当传递的url是经过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,073,510
精华内容 1,229,404
关键字:

url中