前几天遇到url特殊字符编码的问题,在这里整理一下:
JavaScript
1. 编码 escape(String)
其中某些字符被替换成了十六进制的转义序列。
解码 unescape(String)
该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。
*注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。
2. 编码 encodeURI(URIstring)
返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
*如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。
解码 decodeURI(URIstring)
返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。
3. 编码 encodeURIComponent(URIstring)
返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
解码 decodeURIComponent(URIstring)
返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。
*encodeURIcomponent() 与 encodeURI() 区别
encodeURIComponent(URIstring) : 假定其参数是URI一部分(比如协议、主机名、路径或查询字符串),因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号(? # 等)。
encodeURI(URIstring) : 不会对URI中的分隔符编码,如 ? # 等。
Java
编码: Class URLEncoder
static String encode(String s);
static String encode(String s, String enc);//enc 编码方式 推荐使用UTF-8
解码: Class URLDecoder
static String decode(String s);
static String decode(String s, String enc);//enc 编码方式 推荐使用UTF-8
* Java中的编码解码方式和JS中的encodeURIComponent()/decodeURIComponent()方法是前后台通用的;两者在处理字符串的方式是没有区别的;