地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。
js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法,
escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),
encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常,发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,
然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,
第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址
(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。
总结:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;
客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, "UTF-8");
今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。
页面
var name=document.myForm.username.value; var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name)); xmlHttp.open("GET",url,true); action中 String name = request.getParameter("name"); name = URLDecoder.decode(name, "UTF-8"); //servlet返回数据时,将字符编码设置为utf-8就可以了,因为Ajax只支持utf-8 response.setContentType("text/xml;charset=utf-8"); PrintWriter out = response.getWriter(); out.print(result);
相关推荐
针对GET请求中文参数乱码的问题,这里提供一种快速解决方法:使用JavaScript的`encodeURI()`函数进行两次编码。`encodeURI()`函数是JavaScript提供的用于编码URI的函数,它不会对已经编码的字符以及特殊字符如'&'、'...
解决Ajax GET请求中文参数乱码的方法有以下几点: 1. 设置请求头编码:在发送Ajax请求时,可以设置`contentType`为`'application/x-www-form-urlencoded; charset=UTF-8'`,确保数据以UTF-8编码发送。 ```...
这样,服务器在解析GET请求参数时会使用正确的字符编码,避免乱码问题。 3. **Servlet处理**: 在Servlet中,你需要正确处理接收到的GET请求参数。`HttpServletRequest`的`getParameter()`方法默认会按照服务器...
在IT领域,尤其是在Java开发中,GET请求的乱码问题是开发者经常会遇到的一个难题。这个问题主要源于字符编码的不一致,特别是在处理中文或者其他非英文字符时更为显著。下面将详细解析GET请求乱码的原因、解决方案...
综上所述,解决`prototype.js`发送Ajax GET请求中文参数乱码问题的关键在于确保客户端、服务器和传输过程中的编码一致性。这包括设置请求头、服务器配置以及HTML页面的字符集声明。在实际开发中,理解并处理这些细节...
解决IE浏览器GET请求下的中文乱码问题,通常有以下几种方法: 1. **服务器端设置**:确保服务器返回的HTTP响应头中`Content-Type`字段正确设置了字符集,如`Content-Type: text/html; charset=utf-8`。这样,浏览器...
总结,解决Spring MVC中GET请求中文乱码问题的关键在于确保从客户端到服务器再到客户端的整个链路中,字符编码的一致性和正确设置。通过调整配置、使用注解或自定义拦截器,可以有效地解决这个问题,确保中文数据的...
当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...
以下将详细解释如何解决Java中处理POST和GET请求时的中文乱码问题。 **POST请求的处理** 1. **表单页面设置**:在HTML表单所在的页面头部,使用`<meta>`标签指定页面的字符集,例如`;charset=utf-8">`。这使得...
因此,当我们直接将包含中文的字符串作为`GET`请求参数时,如果不进行适当的编码,这些中文字符就会被视为无效的URL字符,从而出现乱码。 为了解决这个问题,我们可以使用JavaScript的内置函数`encodeURI()`对包含...
在开发Web应用时,我们经常会遇到中文乱码问题,特别是在使用AJAX进行GET请求时。JSP中的AJAX GET请求的中文乱码问题主要是由于URL编码格式不匹配导致的。以下是一些解决此问题的关键点和步骤: 1. **URL编码格式**...
在Web开发中,经常遇到GET请求传递中文参数时出现乱码的问题。这种现象通常出现在不同编码格式之间的转换过程中,导致浏览器或者服务器端解析参数时出现问题。本文将深入探讨GET方式传参中文乱码的原因,并提供多种...
由于GET请求的数据是可见的,所以在处理中文字符时更容易出现乱码问题。 乱码的产生主要是因为字符集不一致。浏览器、服务器和应用程序之间如果没有统一的字符编码标准,就会导致乱码。因此,处理乱码的关键在于...
然而,在处理中文参数时,尤其是通过GET和POST方法传递时,经常会出现乱码问题。这通常是由于字符编码不一致或者处理不当导致的。以下是对这一问题的详细解析: 首先,我们需要理解字符编码的基本概念。在Web中,...
在本文中,我们将详细介绍乱码问题的原因、类型和解决方法。 一、编码不一致的原因 编码不一致是乱码问题的主要原因。编码不一致可能出现在多个方面: * 页面编码:jsp 默认 iso8859-1 * 服务器编码:tomcat 默认...
在互联网应用中,GET方法是HTTP协议中一种常见的请求方式,...总之,处理GET方法中中文参数乱码问题的关键在于正确编码和解码URL中的非ASCII字符。同时,为了安全性与效率,应尽量避免在URL中传递复杂或敏感的信息。
例如,对于GET请求,可以在页面中设置`<meta charset="UTF-8">`;对于POST请求,可以在HTTP请求头中添加`Content-Type: application/x-www-form-urlencoded; charset=UTF-8`。 5. **使用标准库**: - Java标准库...
总结来说,解决JSP页面中文乱码问题的关键在于保持字符编码的一致性,从编辑器保存文件的编码、JSP页面的编码声明、Servlet的响应编码、POST请求的参数编码,到服务器处理GET请求的编码,都需要进行适配和统一。...