JS中encodeURI()、decodeURI()、encodeURIComponent()和decodeURIComponent()编码与解码
编码解码问题。
解决这个问题大家一般都使用encodeURI或者encodeURIComponent方法,在这里做一下总结:
首先看看各个方法不同浏览器的支持程度
| 函数 | 描述 | FF | N | IE |
|---|---|---|---|---|
| decodeURI() | 解码某个编码的 URI。 | 1 | 4 | 5.5 |
| decodeURIComponent() | 解码一个编码的 URI 组件。 | 1 | 4 | 5.5 |
| encodeURI() | 把字符串编码为 URI。 | 1 | 4 | 5.5 |
| encodeURIComponent() | 把字符串编码为 URI 组件。 | 1 | 4 | 5.5 |
总结一下:
1.encodeURI(),和encodeURIComponent()是对字符进行编码。
2.decodeURI(),和decodeURIComponent()是对相应编码过的字符进行解码。
3.encodeURI 方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
进行url跳转时可以整体使用encodeURI
例如:Location.href=encodeURI(http://cang.baidu.com/do/s?word=百度&ct=21);
4.encodeURIComponent()方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent ("http://cang.baidu.com/bruce42")+'">退出</a>');</script>
5.形象的解释,encodeURI对全角日韩汉字其作用。对URL中的特殊字符不做处理,.encodeURIComponent()对url中的特殊字符做出来,将他们转化成对应的ASCII码
6.这些方法都是JavaScript 函数,也就是只能够在JavaScript中使用。
7.在service端解码,不使用decodeURI()和decodeURIComponent()的,可以使用fw = new String(fw.getBytes("ISO-8859-1"), "UTF-8");java语法,其他语言略有不同。
8.encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
9.encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
扩展:
尽量避免使用escape()和unescape()方法。
escape 方法
escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
unescape 方法
从用 escape 方法编码的 String 对象中返回已解码的字符串。
function unescape(charString : String) : String
参数
charString
必选。要解码的 String 对象或文本。
备注
unescape 方法返回一个包含 charstring 内容的字符串值。所有以 %xx 十六进制形式编码的字符都用 ASCII 字符集当中等效的字符代替。以 %uxxxx 格式(Unicode 字符)编码的字符用十六进制编码 xxxx 的 Unicode 字符代替。注意 unescape 方法不应用于解码“统一资源标识符”(URI)。请改用 decodeURI 和 decodeURIComponent 方法。
decodeURI 方法
返回一个已编码的统一资源标识符 (URI) 的非编码形式。
function decodeURI(URIstring : String) : String
参数
URIstring
必选。表示编码 URI 的字符串。
备注
使用 decodeURI 方法代替已经过时的 unescape 方法。
decodeURI 方法返回一个字符串值。
如果 URIString 无效,将发生 URIError。
decodeURIComponent 方法
返回统一资源标识符 (URI) 的一个已编码组件的非编码形式。
function decodeURIComponent(encodedURIString : String) : String
必选的 encodedURIString 参数是一个表示已编码的 URI 组件的值。
备注
URIComponent 是一个完整的 URI 的一部分
JS中encodeURI()、decodeURI()、encodeURIComponent()和decodeURIComponent()编码与解码的更多相关文章
- JS中encodeURI、encodeURIComponent、decodeURI、decodeURIComponent
js 对文字进行编码涉及2个函数:encodeURI,encodeURIComponent,相应2个解码函数:decodeURI,decodeURIComponent 1.用来编码和解码URI的 统一 ...
- JS中encodeURI,escape,encodeURIComponent区别
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...
- JavaScript encodeURI(), decodeURI(), encodeURIComponent(), decodeURIComponent()
URI: Uniform Resource Identifier encodeURI() And decodeURI() The encodeURI() function is used to en ...
- Java中的字节,字符与编码,解码
ASCII编码 ASCII码主要是为了表示英文字符而设计的,ASCII码一共规定了128个字符的编码(0x00-0x7F),只占用了一个字节的后面7位,最前面的1位统一规定为0. ISO-8859-1 ...
- python中is与==的区别,编码和解码
在介绍is与==的区别前,我们先来了解一些新的知识:内存地址.小数据池. 1.内存地址(is 比较的就是内存地址) 获取内存地址的方法:id() a = "str" 2.小数据池 ...
- web应用中浏览器与服务端的编码和解码
转自:http://blog.sina.com.cn/s/blog_87cb63e50102w2b6.html 以下为正文: ************************************* ...
- JS传递参数时对中文进行编码和解码
var b ="啊,我要过去"; var a = encodeURI(b);//对中文编码 ...
- JS escape、encodeURI 、encodeURIComponent 编码与解码[转]
转至:http://jc-dreaming.iteye.com/blog/1702407 本文讨论如何对传递参数用JS编码与解码 1:编码与解码方法的对应关系 escape ------------- ...
- JS中URL编码参数(UrlEncode)
JS中URL编码参数(UrlEncode) 网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的 ...
随机推荐
- html入门第一天(知识总结)。
一文本标签:----------双标签.<b>标签 <strong>标签,文本呈现粗体(Html5中建议用strong,strong语义更强)<i>标签 <e ...
- Heroku发布前准备
group :development, :test do gem 'byebug', platform: :mri gem 'sqlite3', '~> 1.3.13' end group :p ...
- vue全局API
一.Vue.extend() 顾名思义 extend 继承,官方给出的解释是 (使用基础 Vue 构造器,创建一个“子类”.参数是一个包含组件选项的对象.) Vue构造器是指 vue是一个构 ...
- ASP.NET Core下发布网站图解
与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel ...
- Django 的认识,面试题
Django 的认识,面试题 1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全 ...
- Centos7 安装可视化图形
因为安装的Centos7最小安装包,虚拟机没有可视化界面,可以采用下列命令,安装可视化界面. init id::initdefault: yum install -y libdevmapper* yu ...
- struts 1.x配置文件说明
<struts-config> <global-exceptions /> <!--全局映射定义--> <global-forwards> <fo ...
- centos 7 安装vscode
网上很多写的安装,会遇到一个问题,就是无法启动: sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh ...
- NodeManager介绍
原文链接: http://blog.csdn.net/zhangzhebjut/article/details/37730013 参考文档: https://blog.csdn.net/u013384 ...
- 博客1--tensorflow的图像基本处理操作
话不多,具体内容在开源中国里我的博客:https://my.oschina.net/u/3770644 代码: #!/usr/bin/env python# -*- coding:utf-8 -*-# ...