`

地址栏出现中文

 
阅读更多

地址栏中出现汉字的情况有两种,一种是汉字出现在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()编码方式,乱码问题就解决了。
页面

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. var name=document.myForm.username.value;  
  2. var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name));  
  3. xmlHttp.open("GET",url,true);  
  4. action中  
  5. String name = request.getParameter("name");  
  6. name = URLDecoder.decode(name, "UTF-8");  
  7. //servlet返回数据时,将字符编码设置为utf-8就可以了,因为Ajax只支持utf-8  
  8. response.setContentType("text/xml;charset=utf-8");  
  9. PrintWriter out = response.getWriter();  
  10. out.print(result);  
分享到:
评论

相关推荐

    js获取中文地址栏参数

    在进行Web开发的过程中,经常会遇到需要从URL地址栏中获取参数的情况,特别是当涉及到中文字符时,处理起来可能会更加复杂。本文将详细讲解如何利用JavaScript(简称JS)来正确地获取URL中的中文参数,并解决可能...

    利用JS把URL地址栏%20、%55之类编码转成中文字符

    本文将深入探讨如何使用JavaScript(简称JS)来解码这些URL编码,使其转换回原本的中文或其他非英文字符。 ### URL编码与解码原理 URL编码的主要目的是确保URL中的所有字符都能在网络上传输,避免因特殊字符导致的...

    网页资源下载及地址栏乱码处理

    例如,服务器返回的页面是UTF-8编码,但浏览器按照GBK解码,就可能出现中文乱码。 4. **URL编码**: 地址栏中的URL不能直接包含非ASCII字符,因此需要进行URL编码。在URL中,非ASCII字符会被转换为%xy的形式,其中...

    解决了浏览器URL地址栏直接输入get参数值包含中文时的urlencode编码格式问题

    前段时间,在做一个采集插件的时候,出现了一个问题。 浏览器网址后面带的get参数值含有中文的时候,在php里面获取字符串并且进行urlencode处理的时候,不同的浏览器,urlencode函数转换后的结果不一样。 原来...

    易语言源码取IE地址栏.7z

    "易语言源码取IE地址栏"是一个关于如何通过易语言获取Internet Explorer(简称IE)浏览器地址栏URL的程序源代码。这个源代码可能包含一个或多个函数或者过程,用于读取和处理IE浏览器当前打开页面的URL信息。 在...

    地址栏传递中文参数乱码在js里用escape转码

    当我们在Web开发中遇到URL地址栏传递中文参数出现乱码的问题时,一个常见的解决办法是使用JavaScript中的escape函数进行转码。这个函数能够将字符串中的中文字符转换为一个十六进制形式的URL编码字符串。在某些...

    jsp地址栏传中文显示乱码解决方法分享

    在开发Java Web应用程序时,尤其是使用JSP技术时,可能会遇到一个常见的问题,那就是在URL地址栏传递中文参数时出现乱码。这个问题主要是由于字符编码不一致导致的。本篇文章将详细讲解如何解决JSP中地址栏传中文...

    取IE浏览器地址栏内容.zip易语言程序源码资源下载

    这个“取IE浏览器地址栏内容.zip”压缩包内包含了一个易语言程序源码,名为“取IE浏览器地址栏内容.e”,显然是用于获取Internet Explorer浏览器地址栏中的URL信息。 在Windows操作系统中,Internet Explorer(简称...

    jsp地址栏传中文显示乱码解决方法分享.docx

    ### JSP地址栏传中文显示乱码解决方法 在Web开发过程中,经常遇到的一个问题是当通过URL传递包含中文字符的数据时,在接收端会出现乱码的情况。这种情况尤其在使用Java Server Pages (JSP)进行Web应用开发时较为...

    解决ie8地址栏无记录

    - 文件`ChsBrKr.dll`和`chtbrkr.dll`是与中文输入法相关的动态链接库,如果它们损坏或缺失,可能导致地址栏功能异常。使用系统自带的“系统文件检查器”(SFC /SCANNOW)扫描并修复系统文件。 5. **更新或重装...

    易语言源代码_取IE浏览器地址栏内容.zip

    5. **错误处理**:任何程序都应考虑可能出现的异常情况,比如浏览器窗口未打开、地址栏控件不存在等。易语言提供了丰富的错误处理机制,如`错误提示`、`异常处理`等结构,确保程序在遇到问题时能正常运行。 这个...

    取IE地址栏.zip易语言程序源码资源下载

    这个“取IE地址栏.zip”文件包含了易语言编写的一个程序源码,该程序的功能是获取Internet Explorer(IE)浏览器的地址栏内容。对于初学者、学生以及程序员来说,这是一个很好的学习资源。 在易语言中,开发这样的...

    jquery获取URL中参数解决中文乱码问题的两种方法

    以上就是解决在使用jQuery获取URL参数时出现中文乱码问题的两种方法,以及相关的编码和解码处理方式。需要注意的是,乱码问题的出现主要是由于编码和解码不一致导致的,所以在前后端处理URL参数时,一定要注意正确地...

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

    1. 确认浏览器地址栏显示的中文是正确的,说明客户端到服务器的传输过程中,中文字符未被正确编码或解码。 2. 检查服务器端是否配置了正确的字符集解析URL编码。在一些Web服务器中,可能需要特别配置或开启字符集...

    Windows 8.1中文版系统使用中文软件出现乱码问题.docx

    1. 打开“我的电脑”(在Windows 8.1中,通常称为“此电脑”),在地址栏中输入"Control Panel"并回车,这将打开控制面板。 2. 在控制面板中,利用搜索功能输入"Region",然后按回车键。找到并打开“区域”设置。 ...

    fusioncharts 点击柱子链接,中文乱码

    在使用FusionCharts图表库进行数据可视化时,可能会遇到一个常见问题:当用户点击图表中的柱子(或者条形图)触发链接时,链接中的中文字符会出现乱码现象。该问题通常出现在设置柱子属性的`link`参数中包含中文或...

    php url地址栏传中文乱码解决方法集合

    在Web开发过程中,当使用URL GET方法传递中文参数时,由于URL标准编码的需要和中文字符编码的多样性,不经过处理的中文参数在服务器端接收时可能会出现乱码。为了解决这一问题,通常需要对URL中的中文参数进行编码...

    中文乱码处理方案.docx

    在分析这个问题时,我们将围绕四个类型的中文问题展开讨论:表单GET提交、表单POST提交、页面链接传递中文参数和地址栏直接输入中文提交。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的规则,...

    中文乱码解决方案终稿.pdf

    然而,问题在于,当通过浏览器地址栏直接输入中文参数提交时,由于IE6有一个“以UTF-8发送URL”的选项,这可能导致乱码。这是因为IE6将URL编码为UTF-8,而Tomcat可能仍按照默认的ISO-8859-1解码,从而引发乱码。 ...

Global site tag (gtag.js) - Google Analytics