编码:
encodeURIComponent 将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。
说明encodeURIComponent方法返回一个已编码的 URI。如果您将编码结果传递给decodeURIComponent,那么将返回初始的字符串。因为encodeURIComponent方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如/folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用encodeURI方法进行编码。
encodeURI 方法返回编码为有效的统一资源标识符 (URI) 的字符串。
说明
encodeURI 方法返回一个已编码的 URI。如果将编码结果传递给 decodeURI,则将返回初始的字符串。encodeURI 不对下列字符进行编码:“:”、“/”、“;”和“?”。请使用 encodeURIComponent 对这些字符进行编码。
escape 方法返回一个可在所有计算机上读取的编码 String 对象。
说明
escape 方法返回一个包含 charstring 内容的字符串值(Unicode 格式)。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中 xx 等于表示该字符的十六进制数。例如,空格返回为""。 字符值大于 255 的字符以 %uxxxx 格式存储。注意 escape 方法不能用来对“统一资源标识符”(URI) 进行编码。对其编码应使用 encodeURI 和 encodeURIComponent 方法。
解码:
decodeURI 方法返回一个已编码的统一资源标识符 (URI) 的非编码形式。
说明
使用 decodeURI 方法代替已经过时的 方法。 decodeURI 方法返回一个字符串值。 如果 URIString 无效,将发生 URIError
decodeURIComponent方法返回统一资源标识符 (URI) 的一个已编码组件的非编码形式。
说明
URIComponent 是一个完整的 URI 的一部分。 如果 encodedURIString 无效,则将产生 URIError。
JS编码后java后台的解码
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(encodeURIComponent(seartext));
Java:
searchtext=java.NET.URLDecoder.decode(searchtext,"UTF-8");
为什么要两次编码的原因:后台java代码给searchtext赋值的时候,本身已经使用了一次解码,不过解码的结果依然不对。所以我们可以在页面上进行两次编码操作,这样后台自动的那次就可以抵消掉一次,然后在使用searchtext=java.Net.URLDecoder.decode(searchtext,"UTF-8");进行一次解码就好了。
解决方法二:
另外还有一种方法是JavaScript进行一次编码,后台java处理时换种想法就好了:
java代码:
String s = new String(request.getParameter("name").getBytes("ISO8859-1"), "UTF-8");
说明
escape 方法返回一个包含 charstring 内容的字符串值(Unicode 格式)。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中 xx 等于表示该字符的十六进制数。例如,空格返回为""。 字符值大于 255 的字符以 %uxxxx 格式存储。
注意 escape 方法不能用来对“统一资源标识符”(URI) 进行编码。对其编码应使用 encodeURI 和 encodeURIComponent 方法。