033 Url中特殊字符的处理

  在url跳转页面的时候,参数值中的#不见了,一直没有处理,今天有空看了一下,后来发现后台的过滤器之类的都没有处理,就比较奇怪了,原来是特殊字符的问题。

一:Url中的特殊字符

1.说明

  这里还是需要做到一个眼熟的,遇到的时候可以快速定位到。

  具体现象就是 用URL传参数的时候,用&符号连接,如果某一个参数中含"#$ ^ & * + ="这些符号的时候,在另一个页面getParameter就会取不到传过来的参数。

 

2.特殊字符

  

 

3.特殊字符的含义

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

 

4.为啥要编码

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

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

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

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

 

5.Url可以使用的字符

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

 

6.保留字符

  

 

7.不安全字符

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

  

 

二:JS处理

1.escape,encodeURI和encodeURIComponent的区别

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

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

 

2.其安全字符

  就是不会编码的字符

  

 

3.对Unicode的编码不同

  这三个函数对于ASCII字符的编码方式相同,均是使用百分号+两位十六进制字符来表示。

  但是对于Unicode字符,escape的编码方式是%uxxxx,其中的xxxx是用来表示unicode字符的4位十六进制字符。这种方式已经被W3C废弃了。但是在ECMA-262标准中仍然保留着escape的这种编码语法。

  encodeURI和encodeURIComponent则使用UTF-8对非ASCII字符进行编码,然后再进行百分号编码。这是RFC推荐的。因此建议尽可能的使用这两个函数替代escape进行编码。

 

4.小实验

  

 

三:总结

  今天遇到的问题,查了一下,还是更适合使用encodeURIComponent()

  当决定使用哪个函数的时候,还需要查一下其安全字符。

 

转载于:https://www.cnblogs.com/juncaoit/p/9708114.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Effective Java(1)-创建和销毁对象

Effective Java(1)-创建和销毁对象 转载于:https://www.cnblogs.com/Johar/p/10556218.html

什么是Affinity

什么是Affinity 在某些情况下,Android需要知道一个Activity属于哪个Task,即使它没有被启动到一个具体的Task里。这是通过任务共用性(Affinities)完成的。任务共用性(Affinities)为这个运行一个或多…

vue this

https://blog.csdn.net/cddcj/article/details/80866902

课外书——自控力(斯坦福大学最受欢迎的心理学课程)

01我要做,我不要,我想要:什么是意志力?为什么意志力?为什么意志力至关重要? 核心思想: 意志力实际上是“我要做”、“我不要”和“我想要”这三种力量。它们协同努力,让我们变成更好…

Docker运行GUI软件的方法

转自 https://www.csdn.net/article/2015-07-30/2825340 简介: Docker通过namespace将容器与主机上的网络和运行环境进行了隔离,默认情况下,在容器中运行带界面的软件在外部是看不到的。在这个分享中,将介绍通过共享X11套接字让外…

JS正则表达式验证数字非常全

验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9](.[0-9…

VMware VIC

vSphere Integrated Containers - a short intro High-Level view of VCH Networking vSphere Integrated Containers Roles and Personas 参考链接:https://vmware.github.io/vic-product/assets/files/html/1.4/转载于:https://www.cnblogs.com/vincenshen/p/9715…

vue new vue

https://www.jianshu.com/p/5ca5f40e4810

MySQL 之group_concat_max_length Mac 版

用过MySQL的人都知道,group_concat这个函数是有最大值限制的,当超过了最大值就会报错! 在window下的处理方法就是修改MySQL的配置文件my.ini,在其中添加 #group_concat_max_len setting group_concat_max_len 1024000000 然…

Locust学习总结分享

简介: Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。它的主要思想就是模拟一群用户将访问你的网站。每个用户的行为由你编写的py…

IDEA系列(四)一部署war 和 war exploded的区别

war模式:将WEB工程以包的形式上传到服务器 ; war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包&a…

Vue常用7个属性

https://www.cnblogs.com/bgwhite/p/9297221.html

初始Zookeeper

Zookeeper是一个分布式服务框架,据说是一个比较强大的架构模式,具体我也不甚了解,但是最近由于工作上的原因,需要部署一个Zookeeper服务,实现移动端一个简单的发单、抢单功能。于是我便开始了解这个框架,将…

开发进度

项目名称:信息技术手册查重错误比对分析 功能概述: (1) 数据导入:要求将提供的信息技术手册文档倒入数据库中 方法: 将word文档中的内容复制到text中,利用notepad打开,利用正则表达…

Solr的安装和使用

安装 CentOS中先安装好Java和Tomcat。准备工具IK Analyzer 2012FF 和Solr-4.10.3.tgz 将solr-4.10.3文件夹中dist中的solr-4.10.3.war文件复制到Tomcat的webapps,并且更名为solr.war,下开启tomcat解压后再关闭tomcat,再删除solr.war。 将Solr…

springboot工程打包时将application.properties放在jar包外

https://blog.csdn.net/luckyzsion/article/details/83743604

史上最详细的js日期正则表达式分享

最简单的正则 如 : /d{4}-/d{2}-/d{2} 但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题..... 对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。 UNIX时间戳的0按…

laravel的validator验证

1.引入对应的类 use Illuminate\Support\Facades\Validator;2.自定义规则,写在模型,控制器,中间件都可以 $rules [password > required|between;6,20|confirmed, name > required|between;3,8, ];3.自定义提示,laravel自…

HTML,CSS,JaveScript

一、HTML 1、标记语言 标记语言为非编程语言,不具备编程语言具备的程序逻辑 2、html为前端页面的主体,由标签、指令与转义字符(实体)等组成 标签:被尖括号包裹,由字母开头包含合法字符的,可以被…

python用户交互、基本数据类型、运算符

用户交互 在实际应用中,我们经常需要用户输入相应信息,根据用户输入信息进行反馈,此时我们需要input/output信息 python中提供了便捷的输入方法input()和print() 在python3中 name input("…