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 判断指定字符串是否为有效数字
May 11 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
jQuery中:disabled选择器用法实例
Jan 04 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
详解网站中图片日常使用以及优化手法
Jan 09 Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
解决linux下node.js全局模块找不到的问题
May 15 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
Vue源码分析之Vue实例初始化详解
Aug 25 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 安装(win+linux)
2012/05/05 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
深入理解javaScript中的事件驱动
2013/05/21 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
总经理秘书的岗位职责
2013/12/27 职场文书
总经理的岗位职责
2014/02/23 职场文书
高三高考决心书
2014/03/11 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
孔繁森观后感
2015/06/10 职场文书
八月一日观后感
2015/06/10 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫