js 转义字符及URI编码详解


Posted in Javascript onFebruary 28, 2017

URL中的转义字符

当URL的参数中出现诸如+,空格,/,?,%,#,&,=等特殊字符串符号时,因为上述字符有特殊含义,导致服务器端无法正确解析参数,如何处理?解决办法:将这些字符转化成服务器可以识别的字符。

如果要在URL中传递特殊符号的原本意义,要对他们进行编码。编码的格式为:%加字符的ASCII码(16进制),例如空格的编码值是"%20"。

URL中特殊符号的用途及普通意义的编码

+ URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D

HTML中的转义字符

转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,“<”和“>”符号用来表示HTML标签,不能当作普通的符号来使用。如果要在HTML文档中使用这些特殊符号原有的意义,就需要定义对应的转义字符串。当浏览器遇到这类转义字符时就会解释为真实的字符而不是特殊用途。另外有些字符在ASCII字符集中没有文字代号,只能用转义字符串来表示,如回车换行符,退格键等。

字符 十进制 转义字符
" " "
& & &
< <
> >
不断开空格(non-breaking space)    

JavaScript中的转义

JavaScript 中有些字符有特殊用途,如果字符串中想使用这些字符原来的含义,需要使用反斜杠对这些特殊符号进行转义。

正则中也有需要转义的字符:* . ? + $ ^ [ ] ( ) { } | \ /,也是通过\反斜杠进行转义。但是中括号里并不是元字符,不需要转义。

在js中字符串形式的正则表达式匹配一个反斜杠要用四个反斜杠'\\\\', 第一个斜杠是js字符串的转义符,第二个斜杠是斜杠本身,第三个斜杠是js字符串的转义符,第四个斜杠是斜杠本身。将第二、四个反斜杠转为正则中的斜杠后,前面一个为正则中的转义符,将后者变为普通符号。字符串形式的正则表达式里的斜杠也是特殊符号,若要当普通符号使用,也需要转义,用“\\”标示。因为js中反斜扛为特殊符号(转义字符),js字符串里面表示斜杠需要一次转义:“\\”。

在比如:字面量形式/\{.*\}/---->字符串形式'\\{.*\\}'。因为{号为正则中的特殊符号,需要加\转义,而字符串中的\又是js中的特殊符号,需要再加一个\进行转义。

注意正则的字面量形式只需要对正则中的特殊符号转义,不需要对js的特殊符号转义。

代码 输出的普通字符
\' 单引号
\" 双引号
\& 和号
\\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
\b 退格符
\f 换页符

js中对字符串进行编码的方法

1.encodeURI()把字符串作为 URI整体进行编码,所以URI组件中的特殊分隔符号(;/:@&=+$?#),encodeURI() 函数不会进行转义。该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )

encodeURI("http://www.w3school.com.cn")

输出http://www.w3school.com.cn

2.encodeURIComponent()把字符串作为 URI 组件的一部分(如path/query/fragment等)进行编码,所以用于分隔 URI 各个部分的特殊分隔符号(;/?:@&=+$,#)也会被转义。返回值中某些字符将被十六进制的转义序列替换。该方法也不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )

encodeURIComponent("http://www.w3school.com.cn")

输出http%3A%2F%2Fwww.w3school.com.cn

3.decodeURI()/decodeURIComponent()解码URI中被转义的字符

decodeURIComponent(%E4%BD%A0%E5%A5%BDjavascript);

输出你好javascript

4.escape()用于对字符串进行编码,并返回编码字符串。但目前已不推荐使用该函数对URI进行编码。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jquery判断单个复选框是否被选中的代码
Sep 03 Javascript
javascript实现淘宝幻灯片广告展示效果
Apr 27 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
Apr 25 Javascript
理解Koa2中的async&amp;await的用法
Feb 05 Javascript
深入理解JavaScript 中的执行上下文和执行栈
Oct 23 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
小程序server请求微信服务器超时的解决方法
May 21 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 jQuery
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
Canvas跟随鼠标炫彩小球的实现
Apr 11 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
Feb 28 #Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
Feb 28 #Javascript
原生js仿淘宝网商品放大镜效果
Feb 28 #Javascript
原生js实现可拖拽效果
Feb 28 #Javascript
javascript 面向对象function详解及实例代码
Feb 28 #Javascript
正则验证小数点后面只能有两位数的方法
Feb 28 #Javascript
原生js实现鼠标跟随效果
Feb 28 #Javascript
You might like
php 面向对象的一个例子
2011/04/12 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
浅说js变量
2011/05/25 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
python利用拉链法实现字典方法示例
2017/03/25 Python
使用Python对Excel进行读写操作
2017/03/30 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python计算两个数的百分比方法
2018/06/29 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
运动会入场解说词300字
2014/01/25 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
倡议书怎么写?
2019/04/11 职场文书