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 相关文章推荐
JavaScript的public、private和privileged模式
Dec 28 Javascript
javascript操作JSON的要领总结
Dec 09 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
表格奇偶行设置不同颜色的核心JS代码
Dec 24 Javascript
理解JavaScript中worker事件api
Dec 25 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
javascript闭包的使用之按钮切换功能
Aug 30 Javascript
详解使用WebPack搭建React开发环境
Aug 06 Javascript
解决vue打包后刷新页面报错:Unexpected token
Aug 27 Javascript
vue获取form表单的值示例
Oct 29 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
如何用js控制css中的float的代码
2007/08/16 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
大学生就业策划书范文
2014/04/04 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
办公室卫生管理制度
2015/08/04 职场文书
早恋主题班会
2015/08/14 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript