`

js/java 页面url传值中文编码&解码问题(转)

 
阅读更多

 地址栏中出现汉字的情况有两种,一种是汉字出现在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()编码方式,乱码问题就解决了。 
页面 
/exportExcel.topinfo?ls="+encodeURI(encodeURI(_tmplsgx))+"&zt="+encodeURI(encodeURI(_tmpzt))s
action中 
 String ls=request.getParameter("ls");
  ls = new String(ls.getBytes("iso-8859-1"),"utf-8");
  ls = java.net.URLDecoder.decode(ls,"UTF-8");
这样乱码就解决了。

分享到:
评论

相关推荐

    jsurl传值java页面url传值中文编码&解码共2页

    本主题将深入探讨“jsurl传值”与“java页面url传值中文编码&解码”的相关知识点。 首先,我们要了解URL编码。URL编码是根据RFC3986标准,对URL中的特殊字符进行转换,以避免与URL语法产生冲突。在JavaScript中,...

    java 页面url传值中文乱码的解决方法

    Java 页面URL传值中文乱码问题通常出现在前端Ajax请求中,当URL参数包含中文字符时,服务器端通过`request.getParameter()`获取参数时,可能会出现乱码现象。这是因为HTTP协议默认使用ISO-8859-1编码,而中文字符...

    java.io.CharConversionException: isHexDigit处理

    Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细分析,介绍导致该异常的原因和解决方法。 一、问题描述 ...

    url传值异常java.io.CharConversionException: isHexDigit

    总结起来,当遇到"java.io.CharConversionException: isHexDigit"异常时,应该检查前端传递的URL参数是否正确编码,并确保在服务器端使用正确的解码方法和字符集。使用`encodeURI`或`encodeURIComponent`函数代替`...

    解决java页面URL地址传输参数乱码的方法

    总结来说,解决Java页面URL地址传输参数乱码问题的关键在于确保URL编码和解码过程中的字符集一致。通过调整Tomcat服务器配置或者在Java代码中进行手动处理,可以有效地避免中文参数在URL传输过程中出现乱码。当然,...

    js传值后台中文出现乱码的解决方法

    总结来说,通过在前端进行正确的编码处理,并在后端通过正确的解码方法还原数据,我们能够有效地解决js传值后台中文乱码的问题。同时,熟练掌握JavaScript的各项操作技巧,对于提升Web开发的效率和质量也有着显著的...

    js url传值中文乱码之解决之道

    在JavaScript中,URL编码是处理含有特殊字符,如空格或中文字符的URL的重要步骤。中文字符在URL中如果不经过编码,可能会导致乱码问题,因为URL标准只允许ASCII字符集的一部分。`encodeURI()` 和 `...

    domino xpages URL中文传值

    `dominoxpagesURL` 标签暗示了这是一个关于 Domino XPages 中 URL 参数编码与解码的问题。以下是详细的知识点解释: 1. **URL编码**: - 在 JavaScript 中,我们可以使用 `encodeURI()` 函数来编码一个 URI(统一...

    解决ajax乱码和页面传值问题

    在Web开发中,Ajax(Asynchronous ...总结,解决Ajax乱码问题主要涉及数据编码、请求头设置和服务器端解码,而页面传值则需根据需求选择适当的方法。理解并熟练运用这些技巧,能显著提升Web应用的性能和用户体验。

    简单实例处理url特殊符号&处理(2种方法)

    在服务器端,Java提供`URLEncoder.encode()`方法用于编码URL参数,而`URLDecoder.decode()`用于解码。确保在编码和解码时使用相同的字符集,以避免数据丢失或解析错误。 总结来说,处理URL特殊符号,尤其是`&`,...

    超链接传值不显示中文

    ### 超链接传值不显示中文问题解析 在网页开发过程中,经常遇到的一个问题是超链接传递中文参数时出现乱码或无法正确显示的问题。这个问题主要由编码转换不当引起,尤其是在涉及不同编码环境(如客户端与服务器端)...

    JS解决url传值出现中文乱码的另类办法

    然而,这种做法增加了代码的复杂性,并且每次传递都需要进行编码解码操作。 在这种情况下,我们可以考虑使用一种另类的解决方案,即动态创建表单(Dynamic Form)的方法。这个方法的核心思想是利用HTML表单的POST...

    URL的参数中有加号传值变为空格的问题(URL特殊字符)

    在处理URL参数时,可能会遇到一些特殊字符问题,比如本文提到的“URL的参数中有加号传值变为空格”的问题。这个问题源于URL编码的规则。 URL编码是一种将特殊字符转换为ASCII码的过程,以便于在网络传输中正确解析...

    j2ee中文乱码问题终极解决之道

    1. 修改J2EE容器配置:例如Tomcat的`server.xml`,在`<Connector>`标签中设置`URIEncoding`属性为相应的中文编码(如GBK或GB2312),确保URL参数的正确解码。 2. 字符串编码转换:在接收数据时,使用`getBytes()`和...

    jsp传值本地无乱码测试机出现乱码问题解决

    在讨论JSP(Java Server Pages)传值时,遇到的本地无乱码而测试机出现乱码的问题是一个典型的编码问题,常见于网络编程和Web开发中。以下是对标题、描述和部分内容所涉知识点的详细解析。 ### 知识点解析 #### ...

    js通过地址栏给action传值(中文乱码全是问号)

    总结来说,解决js通过地址栏给action传值导致的中文乱码问题,需要仔细考虑和检查编码和解码过程中所使用字符集的一致性和正确性。这不仅涉及到客户端和服务器端的字符编码设置,还包括在编码转换过程中所采用的方法...

    JS传值出现中文参数乱码的解决方法

    在JavaScript编程中,当涉及到中文字符的传递时,可能会遇到乱码的问题,尤其是在与服务器进行交互,如Ajax请求或者通过URL参数传递时。这通常是因为字符编码不一致导致的。以下是一些解决JS传值出现中文参数乱码的...

Global site tag (gtag.js) - Google Analytics