解决在 url 中传递 js 变量到 java
程序中出现乱码
问题 js 相关代码: function doFind(default_value){ var q_bureau_name = document.forms[0].q_bureau_name.value; var defpars = ''; if(default_value != null){ defpars = '&;default_value='+default_value; } var url = 'customeroperAction.do'; var pars = 'action=getbureaulist&;sname=customerTel.TEL_BUREAU&;q_bureau_name='+encodeURI(en codeURI(q_bureau_name))+defpars; //encodeURI 两次将文本字符串编码为一个有效 的统一资源标识符 (URI)。 var my = new Ajax.Request(url,{method: 'post',parameters: pars,onComplete: show}); } function show(originalRequest) { var BUREAUSPAN = document.getElementById("BUREAUSPAN"); BUREAUSPAN.inner
HTML = originalRequest.responseText; } java 相关代码: String q_bureau_name = Util.filter(request.getParameter("q_bureau_name")); q_bureau_name = java.net.URLDecoder.decode(q_bureau_name, "UTF-8");
//
ajax 提交数据(post)的格式默认为 utf-8,利用 javascript 的提供的 escape()或 encodeURI()方法.在服务器端接收的时候要使用 java.net.URLDecoder.decode(value,"UTF-8")方法进行解码. js 相关知识: 非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如, 空格返回的是 "%20" 。 字符值大于 255 的以 %uxxxx 格式存储。 注意 escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和 encodeURIComponent 方法。 encodeURI 方法 将文本字符串编码为一个有效的统一资源标识符 (URI)。 encodeURI(URIString) 必选的 URIString 参数代表一个已编码的 URI。 说明 encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将 返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请 使用 encodeURIComponent 方法对这些字符进行编码。 encodeURIComponent 方法 将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。 encodeURIComponent(encodedURIString) 必选的 encodedURIString 参数代表一个已编码的 URI 组件。 说明 encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent, 那么将返回初始的字符串。 因为 encodeURIComponent 方法对所有的 字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html, 其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到
web 服务器时将是无 效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码。