type
status
date
slug
summary
tags
category
icon
password
Property
Feb 21, 2024 08:40 AM
编码解码问题。
解决这个问题大家一般都使用 encodeURI 或者 encodeURIComponent 方法,在这里做一下总结:
首先看看各个方法不同浏览器的支持程度
函数
描述
FF
N
IE
解码某个编码的 URI。
1
4
5.5
解码一个编码的 URI 组件。
1
4
5.5
把字符串编码为 URI。
1
4
5.5
把字符串编码为 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 的一部分
piniajs 积累
  • Twikoo