精华内容
下载资源
问答
  • URL中编码URL特殊字符

    万次阅读 多人点赞 2016-07-04 16:48:57
    URL中编码URL特殊字符
    一、问题的由来

      问题:当url地址中包含&、+、%等特殊字符(主要是传递参数时,参数的内容中包含这些字符)时,地址无效。比如http://10.190.0.0:108/doc/test+desc2.bmp,若文件名中出现+/&等特殊字符,后台会报404的错误,即web服务器找不到页面或者资源。

            ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

            URL就是网址,只要上网,就一定会用到。


      一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址“http://www.abc.com”,但是没有希腊字母的网址“http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com)。这是因为网络标准RFC 1738做了硬性规定:

      "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

      “只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。”

      这意味着,如果URL中有汉字,就必须编码后使用。但是麻烦的是,RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。这导致“URL编码”成为了一个混乱的领域。

            在使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。这些特殊符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如空格的编码值是"%20"。下表中列出了一些URL特殊符号及编码。

    序号 特殊字符 含义 十六进制值
    1. + URL 中+号表示空格 %2B
    2. 空格 URL中的空格可以用+号或者编码 %20
    3. / 分隔目录和子目录 %2F
    4. ? 分隔实际的 URL 和参数 %3F
    5. % 指定特殊字符 %25
    6. # 表示书签 %23
    7. & URL 中指定的参数间的分隔符 %26
    8. = URL 中指定参数的值 %3D

      下面就让我们看看,“URL编码”到底有多混乱。我会依次分析四种不同的情况,在每一种情况中,浏览器的URL编码方法都不一样。把它们的差异解释清楚之后,我再说如何用Javascript找到一个统一的编码方法。

    二、情况1:网址路径中包含汉字

      打开IE(我用的是8.0版),输入网址“http://zh.wikipedia.org/wiki/春节”。注意,“春节”这两个字此时是网址路径的一部分。


      查看HTTP请求的头信息,会发现IE实际查询的网址是“http://zh.wikipedia.org/wiki/%E6%98%A5%E8%8A%82”。也就是说,IE自动将“春节”编码成了“%E6%98%A5%E8%8A%82”。


      我们知道,“春”和“节”的utf-8编码分别是“E6 98 A5”和“E8 8A 82”,因此,“%E6%98%A5%E8%8A%82”就是按照顺序,在每个字节前加上%而得到的。

      在Firefox中测试,也得到了同样的结果。所以,结论1就是,网址路径的编码,用的是utf-8编码。

    三、情况2:查询字符串包含汉字

      在IE中输入网址“http://www.baidu.com/s?wd=春节”。注意,“春节”这两个字此时属于查询字符串,不属于网址路径,不要与情况1混淆。


      查看HTTP请求的头信息,会发现IE将“春节”转化成了一个乱码。


    切换到十六进制方式,才能清楚地看到,“春节”被转成了“B4 BA BD DA”。


      我们知道,“春”和“节”的GB2312编码(我的操作系统“Windows XP”中文版的默认编码)分别是“B4 BA”和“BD DA”。因此,IE实际上就是将查询字符串,以GB2312编码的格式发送出去。 

      Firefox的处理方法,略有不同。它发送的HTTP Head是“wd=%B4%BA%BD%DA”。也就是说,同样采用GB2312编码,但是在每个字节前加上了%。


      所以,结论2就是,查询字符串的编码,用的是操作系统的默认编码。

    四、情况3:Get方法生成的URL包含汉字

      前面说的是直接输入网址的情况,但是更常见的情况是,在已打开的网页上,直接用Get或Post方法发出HTTP请求。

      根据台湾中兴大学吕瑞麟老师的试验,这时的编码方法由网页的编码决定,也就是由HTML源码中字符集的设定决定。

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

      如果上面这一行最后的charset是UTF-8,则URL就以UTF-8编码;如果是GB2312,URL 就以GB2312编码。 

      举例来说,百度是GB2312编码,Google是UTF-8编码。因此,从它们的搜索框中搜索同一个词“春节”,生成的查询字符串是不一样的。 

      百度生成的是%B4%BA%BD%DA,这是GB2312编码。


      Google生成的是%E6%98%A5%E8%8A%82,这是UTF-8编码。


      所以,结论3就是,GET和POST方法的编码,用的是网页的编码。

    五、情况4:Ajax调用的URL包含汉字

      前面三种情况都是由浏览器发出HTTP请求,最后一种情况则是由Javascript生成HTTP请求,也就是Ajax调用。还是根据吕瑞麟老师的文章,在这种情况下,IE和Firefox的处理方式完全不一样。

      举例来说,有这样两行代码:

      url = url + "?q=" +document.myform.elements[0].value; // 假定用户在表单中提交的值是“春节”这两个字

      http_request.open('GET', url, true);

      那么,无论网页使用什么字符集,IE传送给服务器的总是“q=%B4%BA%BD%DA”,而Firefox传送给服务器的总是“q=%E6%98%A5%E8%8A%82”。也就是说,在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。这就是我们的结论4。

    六、Javascript函数:escape()

      好了,到此为止,四种情况都说完了。

      假定前面你都看懂了,那么此时你应该会感到很头痛。因为,实在太混乱了。不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。如果程序员要把每一种结果都考虑进去,是不是太恐怖了?有没有办法,能够保证客户端只用一种编码方法向服务器发出请求?

      回答是有的,就是使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。

      Javascript语言用于编码的函数,一共有三个,最古老的一个就是escape()。虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起。

      实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,也就是说在Unicode字符集中,“春”是第6625个(十六进制)字符,“节”是第8282个(十六进制)字符。


      它的具体规则是,除了ASCII字母、数字、标点符号“@ * _ + - . /”以外,对其他所有字符进行编码。在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。对应的解码函数是unescape()。

      所以,“Hello World”的escape()编码就是“Hello%20World”。因为空格的Unicode值是20(十六进制)。


      还有两个地方需要注意。

      首先,无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符。也就是说,Javascipt函数的输入和输出,默认都是Unicode字符。这一点对下面两个函数也适用。

      其次,escape()不对“+”编码。但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。

    七、Javascript函数:encodeURI()

      encodeURI()是Javascript中真正用来对URL编码的函数。

      它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。


      它对应的解码函数是decodeURI()。


      需要注意的是,它不对单引号'编码。

    八、Javascript函数:encodeURIComponent()

      最后一个Javascript编码函数是encodeURIComponent()。与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

      因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。


      它对应的解码函数是decodeURIComponent()。

    展开全文
  • URL中中文转码和解码

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

    在爬取数据是时候很多搜索的词语中在浏览器上显示的是中文,但是我们复制url到本地,中文就会出现我们看不懂的文字。
    如果我们需要爬虫的时候也是一样,我们需要给浏览器传过去的也是对url中的中文进行转码之后的url地址,否则在url中的关键字直接出现中文会有问题。在python3的环境中的urllib库中 quote模块 提供了这一功能

    一、URL转码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    from urllib.parse import quote
    
    name = '诗人李白'
    url_encode_name = quote(name)
    print(url_encode_name)
    
    输出:
    %E8%AF%97%E4%BA%BA%E6%9D%8E%E7%99%BD
    

    二、URL解码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    from urllib.parse import unquote
    
    name = '%E8%AF%97%E4%BA%BA%E6%9D%8E%E7%99%BD'
    url_decode_name = unquote(name)
    print(url_decode_name)
    
    输出:
    诗人李白
    

    三、使用urlencode对url转码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    from urllib.parse import urlencode
    
    start_url='http://tieba.baidu.com/f?'
    urldata = {
        'kw':'诗人李白',
        'ie':'utf-8',
        'pn':'100',
    }
    
    print(start_url+urlencode(urldata))
    
    输出:
    http://tieba.baidu.com/f?kw=%E8%AF%97%E4%BA%BA%E6%9D%8E%E7%99%BD&ie=utf-8&pn=100
    
    展开全文
  • url中传递参数

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

    url
    1.url传递参数
    1.非关键字参数
    url地址访问格式:/路径/路径/参数
    urls正则的定义:/路径/路径/(参数匹配的正则)

        注意:1.如果要获取传递进来的参数,必须给对应的正则加上()才可以提取
            2.如果url中有参数,就必须给视图函数加上参数,否则报错
    

    传递多个参数:
    view中:
    这里写图片描述
    url中:这里写图片描述
    这里写图片描述
    接收的参数必须与传递的参数一一对应

    2.非关键字参数
    这里写图片描述

    好处:会自动用关键字传递参数。视图函数的形参不需要一一对应
    这里写图片描述

    展开全文
  • react获取URL中参数

    万次阅读 2017-12-12 21:26:42
    这个问题想必很多人都会遇到过,这里我说一下怎么获取URL中的参数。 如图获取purchaseOrderNo中的值。 这个时候我们需要使用一个东西: `queryString.parse(_this.props.location.search)` 通过这句话就可以...

    这个问题想必很多人都会遇到过,这里我说一下怎么获取URL中的参数。

    react 获取URL原理:

    在 react 组件的 componentDidMount 方法中打印一下 this.props,在浏览器控制台中查看输出如下:
    在这里插入图片描述

    其中页面的 url 信息全都包含在 match 字段中,

    以地址  localhost:3000/app/knowledgeManagement/modify/STY20171011124209535/3/1507701970070/0/?s=1&f=7  为例
    
    其中各个参数定义对应如下:
    
    localhost:3000/app/knowledgeManagement/modify/:studyNo/:stepId/:randomNum/:isDefault/?s=&f=
    

    首先打印 this.props.match

    在这里插入图片描述

    可以看到 this.props.match 中包含的 url 信息还是非常丰富的,其中

    history: 包含了组件可以使用的各种路由系统的方法,常用的有 push 和 replace,两者都是跳转页面,但是 replace 不会引起页面的刷新,仅仅是改变 url。

    location: 相当于URL 的对象形式表示,通过 search 字段可以获取到 url 中的 query 信息。(这里 state 的含义与 HTML5 history.pushState API 中的 state 对象一样。每个 URL 都会对应一个 state 对象,你可以在对象里存储数据,但这个数据却不会出现在 URL 中。实际上,数据被存在了 sessionStorage 中)(参考: 深入理解 react-router 路由系统)

    match: 包含了具体的 url 信息,在 params 字段中可以获取到各个路由参数的值。


    通过以上分析,获取 url 中的指定参数就十分简单了,下面是几个例子:

    // localhost:3000/app/knowledgeManagement/modify/STY20171011124209535/3/1507701970070/0/?s=1&f=7
    // localhost:3000/app/knowledgeManagement/modify/:studyNo/:stepId/:randomNum/:isDefault/?s=1&f=7
    
    // 获取 studyNo
    this.props.match.match.params.studyNo // STY20171011124209535
    
    // 获取 stepId
    this.props.match.match.params.stepId // 3
    
    // 获取 success
    const query = this.props.match.location.search // '?s=1&f=7'
    const arr = query.split('&') // ['?s=', 'f=7']
    const successCount = arr[0].substr(3) // '1'
    const failedCount = arr[1].substr(2) // '7'
    

    注意点:

    如果这个值需要在页面中及时获得,这个时候就需要注意了,我们都知道react是有生命周期的,那么什么时候获取URL的值最合适呢?

    • 这个我推荐在componentDidMount 这个生命周期的时候去获取,因为这个时候页面已经挂在好了,完全可以拿到URL上面的值。
    展开全文
  • 本文给大家介绍php解析url并得到url中的参数及获取url参数的四种方式,涉及到将字符串参数变为数组,将参数变为字符串的相关知识,本文代码简单易懂,感兴趣的朋友一起看看吧 下面一段代码是php解析url并得到url中...
  • 利用url传参时如果url中的参数是中文时因为编码类型不同在页面中获取会出现乱码使用此方法能获取url中的参数值 并解决乱码问题调用时直接GetUrlByParamName("参数名"); function GetUrlByParamName(name)...
  • URL中传递中文的解决方式

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

    千次阅读 2016-10-31 17:58:42
    最近在做url带参数跳转页面,发现url地址栏会显示请求的参数,用的是ajax中的post方式,但是貌似没有自动进行加密,这里找到一个解决方案,可以对url中的参数进行加密,在从url中获取参数时直接解密即可。...
  • URL拼接规则 js解析URL中参数

    千次阅读 2017-09-13 15:16:44
    1.URL拼接规则 ... 拼接规则:在路径末尾以一个“?”开头后接“参数名1=参数值1”&“参数名2=参数值2”········ ...2.js解析URL中参数//网上比较经典的js获取url中的参数的方法 function getQ
  • URL中拼接多个参数

    千次阅读 2020-07-01 15:18:07
    标题URL中拼接多个参数 方法如下: 比如:URL="www.baidu.com" 我要在后面拼接上东西的话应该在这个URL后面先加上一个? 比如:URL="www.baidu.com?" +“problem”=xxxx 如果多个参数的话:每个参数名前面加上& ...
  • 1.获取URL中的某个参数: - (NSString *)getParameter:(NSString *)parameter urlStr:(NSString *)url {    NSError *error;  if (!url) {    return @"";  }  NSString *regTags=[
  • 解决URL中有中文的问题,可以放心使用url.opnestream方法
  • url中特殊符号转义

    万次阅读 2017-02-07 11:26:43
    URL中的空格可以用+号或者编码 %20 / 分隔目录和子目录 %2F ? 分隔实际的URL和参数 %3F % 指定特殊字符 %25 # 表示书签 %23 & URL 中指定的参数间的分隔符 %26 = URL ...
  • 网址URL中特殊字符转义编码

    万次阅读 多人点赞 2017-12-29 09:10:57
    网址URL中特殊字符转义编码 字符 - URL编码值 空格 - %20 " - %22 # - %23 % - %25 & - %26 ( - %28 ) - %29 + - %2B ,
  • nginx url中带中文不能访问

    千次阅读 2017-12-18 11:42:10
    title: nginx url中带中文不能访问 date: 2017-12-18 16:29:00 categories: - Android tags: - nginx - shell- 前端解决nginx 部署,url中带中文不能访问利用rz命令上传windows网站部署文件 输入rz回车会弹出...
  • 微信小程序中如何获取url中的参数

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

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

    万次阅读 2017-09-13 13:27:05
    根据rfc规范,url中不允许有 |,{,}等特殊字符,但在实际生产中还是有些url有可能携带有这些字符,特别是|还是较为常见的。在tomcat升级到7以后,对url字符的检查都变严格了,如果出现这类字符,tomcat将直接返回...
  • URL中参数值带有中文的解决方案

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

    万次阅读 2020-03-07 11:46:42
    在Vue遇到很多url都用到了<%= BASE_URL %>这个东西。 <%= BASE_URL %> 看起来很牛pia,其实就是当前目录。
  • 1、读取URL中的参数值 /* *获取URL参数 */ function GetQueryString(name) {  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");  var r = window.location.search.substr(1).match(reg);  
  • vue获取URL中的参数

    万次阅读 2018-11-01 14:16:36
    1 获取?后面的参数  ...  获取参数方法 let id = this.$route.query.username 2 获取不带?的URL中的参数  http://192.168.1.12:8080/#/home/n...
  • jq获取url中的参数

    万次阅读 2019-01-15 13:51:34
    1.第一种方法(参数如果有中文的情况下,就会出现中文乱码) ...mytype=90 ...获取url中的参数userId和mytype的值 var userId=getUrlParam("userId"); varmytype=getUrlParam("userId"); 方法: ...
  • url中的特殊符号

    千次阅读 2017-01-12 20:23:24
    URL中的特殊符号,及解析
  • URL中传递参数时包含中文的问题

    万次阅读 2017-11-23 23:13:04
    项目中,在页面之间点击跳转时需要进行参数传递,需要将中文的参数放入到url中进行跳转传参。
  • 一、Js获取url中参数的方法: /* 获取请求url参数数组 */ function getUrlVars(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for...
  • url中包含特殊字符处理

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

    万次阅读 2017-07-14 00:33:14
    url中向后台传递中文乱码解决方法方法一:1、jsp中代码  var userNo = $('#prisoner_id').val(); userNo = encodeURI(userNo); allPrisonerGrid.datagrid('options').url = 'mobilemanage!allPrisonerPage.action...
  • fastJson解析URL中&特殊字符报错

    千次阅读 2019-04-09 22:35:02
    在做消息推送的时候,突然报出一个fastJosn解析json错误的报错,找了好久都终于发现是因为URL中含有特殊字符需要转义的字符&,导致JSON解析报错。 2.报错信息 网上搜索这个错误,大部分观点是JSON中含有特殊...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 254,873
精华内容 101,949
关键字:

url中