escape()方法
采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20,如果是中文,则使用unicode编码格式如 %uxxxx。unescape方法与此相反。不会被此方法编码的字符有69个:@*_+-./ ,0-9,a-z,A-Z
encodeURI() 方法
把URI字符串采用UTF-8编码格式转化成escape格式的字符串。encodeURI不编码字符有82个:~!@#$&*()_+:?-=;',./,0-9,a-z,A-Z
encodeURIComponent() 方法
把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符71个:~!*()_-'.,0-9,a-z,A-Z
POST方式下的特殊字符转换
随便说说表单以POST方式提交时,表单元素值中的一些字符也会转换,但以下不做转换:+@*_-. ,a-z A-Z 0-9 ,要转换的字符会先用浏览器的编码方式时行编码,然后把编码转换成%xx(xx为两位的十六进制)形式参数串后传送到服务器。
Java中的URLEncoder.encode(String s, String enc) /URLDecoder.decode(String s, String enc)编码方式
Java中的URLEncoder.encode(String s, String enc) /URLDecoder.decode(String s, String enc)机制:它们与JavaScript中的encodeURI、encodeURIComponent函数在编码方式上是不一样的。encodeURI、encodeURIComponent用的是UTF-8,是不能更改的。但Java里的编解码函数不一定是UTF-8,这里的编码与运行的环境是有关系的,默认情况下,在Tomcat5.5下是以ISO8859-1来解码URL中传递过来的参数的,但也可以设置URL的编码方式,比如Tomcat中设置URIEncoding与useBodyEncodingForURI属性是可以的,具体实例请看《HTTP码流与Jsp乱码问题的分析(一)》中的URLEncoder.encode()部分。
URLEncoder.encode(String s, String enc) 对 String 编码时,使用以下规则:
- 字母数字字符 "
a
" 到 "z
"、"A
" 到 "Z
" 和 "0
" 到 "9
" 保持不变。
- 特殊字符 "
.
"、"-
"、"*
" 和 "_
" 保持不变。
- 空格字符 "
" 转换为一个加号 "+
"。
- 所有其他字符都是不安全的,因此首先使用一些编码机制将它们转换为一个或多个字节。然后每个字节用一个包含 3 个字符的字符串 "
%xy
" 表示,其中 xy 为该字节的两位十六进制表示形式。推荐的编码机制是 UTF-8。但是,出于兼容性考虑,如果未指定一种编码,则使用相应平台的默认编码。
例如,使用 UTF-8 编码机制,字符串 "The string ü@foo-bar" 将转换为 "The+string+%C3%BC%40foo-bar",因为在 UTF-8 中,字符 ü 编码为两个字节,C3 (十六进制)和 BC (十六进制),字符 @ 编码为一个字节 40 (十六进制)。
URLDecoder.decode(String s, String enc) 转换过程正好与 URLEncoder 类使用的过程相反。假定已编码的字符串中的所有字符为下列之一:"a
" 到 "z
"、"A
" 到 "Z
"、"0
" 到 "9
" 和 "-
"、"_
"、".
" 以及 "*
"。允许有 "%
" 字符,但是将它解释为特殊转义序列的开始。
转换中使用以下规则:
- 字母数字字符 "
a
" 到 "z
"、"A
" 到 "Z
" 和 "0
" 到 "9
" 保持不变。
- 特殊字符 "
.
"、"-
"、"*
" 和 "_
" 保持不变。
- 加号 "
+
" 转换为空格字符 "
"。
- 将把 "
%xy
" 格式序列视为一个字节,其中 xy 为 8 位的两位十六进制表示形式。然后,所有连续包含一个或多个这些字节序列的子字符串,将被其编码可生成这些连续字节的字符所代替。可以指定对这些字符进行解码的编码机制,或者如果未指定的话,则使用平台的默认编码机制。
分享到:
相关推荐
`URLEncoder.encode()` 和 `URLDecoder.decode()` 是Java标准库中的两个关键方法,分别用于对URL参数进行编码和解码,以确保数据能够正确无误地在网络间传输。 **`URLEncoder.encode()`** 方法接受两个参数:需要...
- 在客户端使用JavaScript的`encodeURI()`或`encodeURIComponent()`函数对参数进行编码。 - 示例代码:`var url = "play.jsp?keyWord=" + encodeURIComponent(keyWord);` 2. **服务器端解码**: - 使用Java的`...
一、基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为... encodeURI()方法相当于java.net.URLEncoder.encode(URIStri
因此,在JavaScript中,通常使用`encodeURI()`或`encodeURIComponent()`函数,并在服务器端使用相应的解码函数来正确处理这种情况。 在Java中,解码URL参数可以使用`java.net.URLDecoder.decode()`方法。这个方法...
这个实现首先使用`URLEncoder.encode()`方法将字符串`s`编码为UTF-8格式,然后使用`replaceAll()`方法进行额外的转换,以确保与JavaScript的`encodeURIComponent`函数行为一致。 对于解码,我们有`...
在JavaScript中,我们可以使用`encodeURIComponent()`、`encodeURI()`和`escape()`函数来编码URL参数。其中,`encodeURIComponent()`是最常用的,它会将除了字母、数字、-._~这六种字符外的所有字符都转换为百分号...
Python中,有`urllib.parse.quote()`和`.unquote()`方法,Java中则有`java.net.URLEncoder.encode()`和`java.net.URLDecoder.decode()`。 工具方面,有一些在线的URL编码解码工具可以帮助开发者快速处理URL中的特殊...
- 在Java中,通常使用`URLEncoder.encode()`来对字符串进行URL编码。该函数同样遵循URL编码的标准,并且支持自定义编码方式。 #### 4. 实际应用场景与示例 假设我们需要通过URL传递一个包含特殊字符“#”的参数,...
总结来看,处理JSP中URL中文乱码问题主要涉及到对URL参数进行合适的编码和解码,这不仅包括在客户端使用JavaScript的encodeURI()和encodeURIComponent()函数,还包括在服务器端使用Java的URLEncoder和URLDecoder类。...
在服务器端,Java提供`URLEncoder.encode()`方法用于编码URL参数,而`URLDecoder.decode()`用于解码。确保在编码和解码时使用相同的字符集,以避免数据丢失或解析错误。 总结来说,处理URL特殊符号,尤其是`&`,...