为什么要对URL进行编码?

一般来说,网页URL只能使用英文、数字、还有一些特定的字符。根据网络标准RFC 1738做了硬性规定:

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

所以若URL中包括中文等字符,就必须经过编码后使用,否则传给服务器的request URL就会包含乱码,服务器无法正确识别。

因为RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定,所以导致“URL编码”领域非常混乱。想要了解浏览器多种情况下的编码处理,可以参考阮一峰大神的关于URL编码

URL的编码与解码方法

不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果,为了保证客户端只用一种编码方法向服务器发出请求,可以使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。

编码方法有三种:

escape(url)、encodeURL(url)、encodeURLComponent(url) (url为需要编码的URL)

方法 规则 特点

escape(编码)

unescape(解码)

除了ASCII字母、数字、标点符号"@ * _ + - . /"以外,对其他所有字符进行编码 现在已经不提倡使用这种方法了,它不能直接运用与URL编码,它的真正作用是返回一个字符的Unicode编码值

encodeURI(编码)

decodeURI(解码)

除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码 encodeURI()是Javascript中真正用来对URL编码的函数,它着眼于对整个URL进行编码

encodeURIComponent(编码)

decodeURIComponent解码)

在encodeURI()中不被编码的符号"; / ? : @ & = + $ , #",在encodeURIComponent()中统统会被编码 与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码

举个栗子:

用后两种常用编码方法对该URL:http://www.w3school.com.cn/my first:class/ 进行编码:

  • encodeURI: encodeURI('http://www.w3school.com.cn/my first:class/') -> http://www.w3school.com.cn/my%20first:class/
  • encodeURIComponent: encodeURIComponent('http://www.w3school.com.cn/my first:class/') -> http%3A%2F%2Fwww.w3school.com.cn%2Fmy%20first%3Aclass%2F

URL编码及解码的更多相关文章

  1. Web开发须知:URL编码与解码

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

  2. java中的url 编码与解码

    什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型.当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www ...

  3. python接口自动化测试十三:url编码与解码

    # url编码与解码 from urllib import parse url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=中文' a = '中文' b ...

  4. LR URL编码和解码方法

    问题:URL=http://www.baidu.com/s?wd=%E6%B5%B7%E6%B7%80%E9%BB%84%E5%BA%84"中要对%E6%B5%B7%E6%B7%80%E9% ...

  5. Oracle url编码与解码

      Oracle url编码与解码 CreateTime--2018年3月30日17:26:36 Author:Marydon 一.url编码 实现方式:utl_url.escape() 说明:utl ...

  6. python中的URL编码和解码

    python中的URL编码和解码:test.py # 引入urllib的request模块 import urllib.request url = 'https://www.douban.com/j/ ...

  7. Delphi编码与签名【URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384和HMAC-SHA512签名】

    作者QQ:(648437169) 点击下载➨delphi编码与签名 [Delphi编码与签名]URL编码与解码,Base64编码与解码,MD5加密,HMAC-SHA1.HMAC-SHA224.HMAC ...

  8. URL编码和解码工具

    开发中发现需要进行URL的编解码,每次百度出来的还带广告而且比较慢,写了一个本地的工具,比较简单,希望对大家有帮助. <!DOCTYPE html PUBLIC "-//W3C//DT ...

  9. IOS URL 编码和解码

    1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPe ...

  10. URL编码与解码

    在项目中碰到了ajax传来的参数,后台接收值乱码(如下图)的问题 在此记录一下 前台: 后台: 解决问题 为什么需要编码 怎样编码 实际出现的问题解决方法 1.为什么需要编码? URL 只能使用 AS ...

随机推荐

  1. 转载 - Tarjan算法(求SCC)

    出处:http://blog.csdn.net/xinghongduo/article/details/6195337 说到以Tarjan命名的算法,我们经常提到的有3个,其中就包括本文所介绍的求强连 ...

  2. mongodb--分片架构【待填的坑】

    首先有一个问题没有搞懂:什么是自动分片?用脚本吗? 一: 多机方式中的另一种方式[分片 => sharding] 分片的对象的谁? 对一个[集合 => 表]进行拆分,把一个大数据拆分成多个 ...

  3. linux下apache2更换目录

    修改apache2的默认文档目录(默认是在/var/www) 修改命令:sudo gedit /etc/apache2/sites-enabled/000-default 在文档中找到 Documen ...

  4. libev与libuv的区别

    参考: http://blog.csdn.net/w616589292/article/details/46475555 libuv 和 libev ,两个名字相当相近的 I/O Library,最近 ...

  5. Keil5.15使用GCC编译器链接.a库文件

    我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设 ...

  6. 转:APP测试总结

  7. Flip Game(枚举)Poj

     Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31329   Accepted: 13622 De ...

  8. 2016.04.14,英语,《Vocabulary Builder》Unit 14

    crypt/cryph, comes from the Greek word for 'hidden', encrypt, crypto- crypt : [krɪpt] n. 土窖, 地穴, (教堂 ...

  9. Swift - 将Data数据转换为[UInt8](bytes字节数组)

    有时上传或者发送图片.文字时,需要将数据转换为 bytes 字节数组.下面介绍两种将 Data 转换为 [UInt8] 的方法. 假设我们有如下 Data 数据要转换: 1 let data = &q ...

  10. encodeURIComponent编码java后台解码出现乱码问题

    问题:JavaScript请求后台带着name参数,有中文进行编码:url?name=" + encodeURIComponent(name):java后台直接使用name或者name=ja ...