JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 。

下面简单介绍一下它们的区别

1 escape()函数

定义和用法
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法
escape(string)

参数  描述 
string  必需。要被转义或编码的字符串。

返回值
已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

2 encodeURI()函数
定义和用法
encodeURI() 函数可把字符串作为 URI 进行编码。

语法
encodeURI(URIstring)

参数  描述 
URIstring  必需。一个字符串,含有 URI 或其他要编码的文本。

返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

3 encodeURIComponent() 函数

定义和用法
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

语法
encodeURIComponent(URIstring)

参数  描述 
URIstring  必需。一个字符串,含有 URI 组件或其他要编码的文本。

返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

提示和注释
提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

4 总结:

通过对三个函数的分析,我们可以知道:escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

5 示例:

1 escape()

<script type="text/javascript">document.write(escape("http://www.w3school.com.cn/") + "<br />")document.write(escape("?!=()#%&"))</script>//输出:http%3A//www.w3school.com.cn%3F%21%3D%28%29%23%25%26

2 encodeURI()

<script type="text/javascript">document.write(encodeURI("http://www.w3school.com.cn/")+ "<br />")document.write(encodeURI("http://www.w3school.com.cn/My first/"))document.write(encodeURI(",/?:@&=+$#"))</script>//输出:http://www.w3school.com.cn/http://www.w3school.com.cn/My%20first/,/?:@&=+$#//对整个URL进行编码,而URL的特定标识符不会被转码。

3 encodeURIComponent()

例1:

<script type="text/javascript">document.write(encodeURIComponent("http://www.w3school.com.cn/"))document.write("<br />")document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))document.write("<br />")document.write(encodeURIComponent(",/?:@&=+$#"))</script>输出:http%3A%2F%2Fwww.w3school.com.cn
http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
%2C%2F%3F%3A%40%26%3D%2B%24%23

例2:

<script>
<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');
</script>

对URL中的参数进行编码,因为参数也是一个URL,如果不编码会影响整个URL的跳转。

转自:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html

js url加密解密相关推荐

  1. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语言时这类可逆函数非常难搞定.所以这时尽量使用AES DES RC4 Rabb ...

  2. url html 加密 php,php实现URL加密解密

    这篇文章主要介绍了php实现URL加密解密的方法,结合实例形式分析了php针对URL字符串进行加密解密操作的相关技巧,需要的朋友可以参考下 具体如下: 无标题文档 function query_enc ...

  3. 【PHP】URL加密解密(可逆)

    URL加密解密(可逆) 加密:urlencode urlencode ( string $str ) : string 此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下 ...

  4. php常用url加密方法,php实现URL加密解密的方法

    本文实例讲述了php实现URL加密解密的方法.分享给大家供大家参考,具体如下: 无标题文档 function query_encode($sQuery) {//加密链接 if(strlen($sQue ...

  5. node.js aes-256-cbc 加密 解密

    需求 使用 node.js 进行AES 加密解密,代码如下 代码 // Nodejs encryption with CTR const crypto = require('crypto'); con ...

  6. PHP中的URL加密解密加密

    1)URL加密代码--主要是urlencode()函数 <?php $url1=urlencode('学习PHP '); echo "index.php?id=".$url1 ...

  7. c#进行url加密解密与jquery前端加密解密

    前言 当我们程序发布于服务器上会遇到前端报错.因为有特殊原因导致. 此时需要对传输的数据,进行加密,后台进行解密处理 C#进行url加密与解密 HttpUtility.UrlEncode(val); ...

  8. java url加密解密,Java加密解密 -Jasypt

    1. download url http://www.jasypt.org/download.html 2. 依赖 jar jasypt-1.9.0.jar 3. 加密 // 默认加密/解密算法是 P ...

  9. url 加密解密, email 加密

    代码: <?php function random($length, $numeric = 0) {//返回随机数mt_srand((double)microtime() * 1000000); ...

最新文章

  1. Vue-路由模式 hash 和 history
  2. OSS在private权限下的无参数访问(Nginx反向代理实现)
  3. Python的逻辑判断和循环 || 打印九九乘法表
  4. vmware ubuntu 虚拟机每次启动都蓝屏怎么办?
  5. [Android]用架构师角度看插件化(2)-Replugin 唯一hook点
  6. hibernate java内存一次能取多少条_Hibernate管理Session和批量操作分析
  7. Turtlebot入门-配置网络
  8. 深入理解Scala的隐式转换
  9. 腾讯被阿里甩出1万亿!中国互联网公司格局剧变!
  10. Base64加密处理
  11. OpenLayers 在Vue中增删改
  12. 第三次收获微软MVP
  13. 车牌检测License Plate Detection and Recognition in Unconstrained Scenarios
  14. 一个基于UDP数据广播的局域网络会议程序
  15. 压力传感器的误差补偿
  16. android备份基带,备份过SHSH,保留基带,直刷5.0.1系统完美详细教程
  17. 从云到「链」,京东云成为中国第四朵云背后
  18. 移动端UI界面设计之-注册登录
  19. 关于LCD1602液显的使用细则
  20. 【LVGL学习笔记】(三)控件使用

热门文章

  1. 一份心肌梗塞患者支架术后的出院诊断证明书
  2. 你有没有使用java生成过二维码?(一)
  3. “十年内难以落地”的无人驾驶,第一站会在哪里?
  4. 阿里云SLB负载均衡理论与详细操作
  5. Java函数式编程forEach理解
  6. 【python做接口测试的学习记录day10——pytest自动化测试框架之接口加密】
  7. 春装搭配 特色时尚毛衣登场
  8. SAP CRM的市场营销(Marketing)管理简介(VI)
  9. Java并发编程最佳实例详解系列
  10. tcplayer 源码改造第二弹 - 加入倍速播放