为什么要对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. java.lang.Object 方法解析

    1.clone() a.是一个native方法,效率比非native高 b.是protected 修饰的,要用他必须继承object,默认都是继承object的 c.返回是一个object 对象,需要 ...

  2. Shallow Heap 和 Retained Heap的区别

    http://blog.csdn.net/a740169405/article/details/53610689 Shallow Heap 和 Retained Heap的区别 https://i.c ...

  3. [bzoj2588][Spoj10628]Count on a tree_主席树

    Count on a tree bzoj-2588 Spoj-10628 题目大意:给定一棵n个点的树,m次查询.查询路径上k小值. 注释:$1\le n,m\le 10^5$. 想法:好像更博顺序有 ...

  4. i386和x86-64区别通俗易懂版本(转)

    x86架构首度出现在1978年推出的Intel 8086中央处理器,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的.Intel之后又推出了包括80186.80 ...

  5. mysql备份恢复中的常见错误

        从A主机备份到B主机 mysqldump -uroot  -p vw>vw.sql 现备份数据库文件,需要恢复到目标机B,B的数据库版本为5.5.23,A机器的mysql版本为5.0.2 ...

  6. BZOJ 1044 HAOI2008 木棍切割 二分答案+动态规划

    题目大意:给定n个连在一起的木棍.分成m+1段.使每段最大值最小,求最大值的最小值及最大值最小时切割的方案数 第一问水爆了--二分答案妥妥秒过 第二问就有些难度了 首先我们令f[i][j]表示用前j个 ...

  7. Oracle创建自增字段方法-ORACLE SEQUENCE的简介

    曾经最头疼的就是对表插入数据的时候,有主键问题. 由于主键不可以反复,所以得用函数自己定义一个规则生成不反复的值赋值给主键. 如今发现oracle有sequence就不用那么麻烦了. 转自:http: ...

  8. Java Mocking入门—使用Mockito

    Java Mocking入门—使用Mockito 2014/03/10 | 分类: 基础技术 | 0 条评论 | 标签: 单元测试 分享到:8 本文由 ImportNew - liken 翻译自 dz ...

  9. Java中对象与引用

    初学Java 时.在非常长一段时间里,总认为基本概念非常模糊. 后来才知道.在很多Java 书中.把对象和对象的引用混为一谈. 假设分不清对象与对象引用,那实在没法非常好地理解以下的面向对象技术.把自 ...

  10. Adding a view

    在添加View之前,之前的页面是下面这个样子,需要注意的是浏览器标题,以及浏览器的内容 https://docs.asp.net/en/latest/tutorials/first-mvc-app/a ...