firfox网页一直用于开发,调试非常方便。因此遇到了浏览器之间的兼容性问题。 url中文参考。
问题:前台使用url传递中文值,后端使用request.getParameter接收参数。
firfox,chrome等没有问题。使用ie时会出现乱码现象。
检查了,忘记了,让我们发布原始文本。更容易理解。
这是一个非常有用的功能,它允许jsp正确解释包含中文的URL并传递中文参数,而且更加复杂。去年,我在一个小项目中遇到了在URL中传递中文参数的问题,但是由于当时我对Jsp不太熟悉,所以我没有解决此问题,而是放弃了一些功能。
但是,必须解决此问题,因为必须在即将进行的项目中使用它。所以,我今天花了一天的时间研究这个问题。幸运的是,辛苦的工作有了回报,现在问题终于解决了。这是一个简介:
IE,Firefox和Opera三个浏览器对URL传输的处理方式不同。浏览器在传输URL时必须对URL进行编码。 IE默认以UTF-8传输,Opera也可以使用UTF。 -8编码,经过测试,Firefox绝对不会以UTF-8编码,它可能会以ISO-8859-1编码。因此,如果不处理汉字,则在每个浏览器以自己的编码方法将汉字传输到服务器后,会出现各种编码方法,但是服务器只能用一种编码方法对接收到的URL进行解码。在这种情况下,将URl与中文一起使用时,使用与服务器使用相同编码方法的浏览器将不会出现问题,而其他浏览器也会出现问题。
因此解决方案是在传输之前在URL中编码中文。使用的编码与服务器的编码相同。假定服务器使用的编码为UTF-8,则编码语句如下:URLEncoder.encode(“ Chinese”,“ UTF-8”)。通过这种方式对中文进行编码后,所有浏览器将不再使用其默认编码方法对中文进行编码,因为浏览器看到的不再是中文,而是编码后的字节码。这样可以避免浏览器传输URL时编码差异的问题。
中文参数问题的解决方案与上面相同。但是这里所指的中文参数是指一种形式,该形式附加到带有?name =“ Chinese parameter”的URL上,并通过get方法传输给服务器,而不是以表单的形式提交给服务器。每个浏览器处理中文参数的方式以及它们在URL中处理中文的方式是不同的,并且浏览器之间也存在差异。有些在传输之前不进行编码,而有些在传输之前进行了编码。情况非常复杂。
但是我们总是使用URLEncoder.encode(“ Chinese”,“ UTF-8”)来编码中文参数,因此无论浏览器如何处理中文参数,我们都会将编码后的中文作为浏览器的字节码,与字母a,b和c一样。但是服务器将使用UTF-8编码来还原中文参数。
摘要:以Tomcat服务器为例,向其添加URIEncoding =“ UTF-8”,并将tomcat设置为处理utf-8编码的URL。其次,使用URLEncoder.encode(“ Chinese”,“ UTF-8”)对URL中的中文和中文参数进行编码。
此外,转码是在后台完成的。
点击打开新页面,用户登录!如果用户名是中文,则Firefox和Google浏览器都可以,但是IE的字符混乱:
问题代码:
Java代码
以超链接形式传递的参数都是Get方法!
Java代码

publicStringsysLogin(){try {name = newString(name.getBytes(“ iso-8859-1”),“ utf-8”); intr = this.memberManager.loginbysys(name); if(r ==1){return“ syslogin”;} this.msgs.add(“登录失败”);} catch(RuntimeExceptione){this.msgs.add(e.getMessage());} catch(UnsupportedEncodingExceptione){this.msgs。 add(e.getMessage());}返回this.MESSAGE;}
修改成功:
Java代码
functiontoSysLogin(name){varuriname =“ member!sysLogin.do?name =” + name; window.open(encodeURI(uriname));}
Java代码
publicStringsysLogin(){尝试{this.setName(.URLDecoder.decode(name,“ UTF-8”))); //在此处转码name = newString(name.getBytes(“ iso-8859-1”),“ utf-8“); intr = this.memberManager.loginbysys(name); if(r ==1){return” syslogin“;} this.msgs.add(” Login failed“);} catch(RuntimeExceptione){ this.msgs.add(e.getMessage());} catch(UnsupportedEncodingExceptione){this.msgs.add(e.getMessage());}返回this.MESSAGE;}
问题解决了!
编码编码
解码解码
这里是完整的。
现在已组织了几种在JAVA中处理URL链接中中文参数乱码的方法,并包括以下内容:
方法1:
#39;我是中国人
字符串strPtname = request.getParameter(“ ptname”);

strPtname =新字符串(strPtname.getBytes(“ ISO-8859-1”),“ UTF-8”);
方法2:
“>点击此处
=================================
公共字符串chinatoString(String str)
{
字符串s = str;
尝试
{
byte tempB [] = s.getBytes(“ ISO-8859-1”);
s = new String(tempB);
返回s;
}
catch(异常e)
{
返回s;
}

}
================================================ =====
URLURLencode(sStr)
{
返回转义符(sStr)。
替换(/ \ + / g,'%2B')。
替换(/ \“ / g,'%22')。
替换(/ \'/ g,'%27')。
replace(//// g,'%2F');
}
方法三:
如果使用jstl,则可以自己编写el函数并调用URLEncoder.encode进行编码。
IE默认情况下在URL后面发送参数而不进行编码,但是tomat默认使用ISO8859-1进行URL解码,因此会发生上述错误。好的做法是:
1、确保在URL参数中使用UTF-8编码,该方法可以使用js函数encodeURI()或调用自定义el函数;
2、在server.xml中设置连接器以熟悉URIEncoding =“ UTF-8”,以确保解码格式和编码格式统一;
方法四:
实际上,字符串s = request.getParameter(“ s”);
s = new String(s.getBytes(“ iso-8859-1”),“ gbk”);
上述方法是一些网民提到的解决方案的集合。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-353860-1.html
不过比起克林顿时期的直接上船搜索银河号以及驻南使馆被精确攻击好很多了
消灭一切反动派
期待