火狐浏览器中文乱码
由于种种原因,LZ项目组中一直使用GBK编码,这个属于历史遗留问题。往常遇到中文乱码问题,基本都是采取页面编码,java端解码的方式进行,费时且费力,需要对中文字段进行特殊处理。
近期,web端需要进行UI升级,全面使用html5的页面进行升级开发,浏览器版本也从原来的仅支持IE一款,发展为火狐和谷歌一同使用,版本测试期间发现了火狐浏览器的中文乱码问题,所有浏览器url地址栏出现中文参数的http请求,传递到java端参数都面目全非。仔细研究发现,原来是火狐浏览器对于get请求的URI默认使用UTF-8编码,而我们系统中tomcat服务器server.xml的配置为GBK编码,因此产生乱码,使用场景如:window.open、window.location.href等js方式的页面跳转,以及form表单的get方式提交。
问题解决的过程中,一共尝试了三种解决方案,列举如下:
解决方案一:需要修改所有jsp页面编码配置,最彻底的解决方案,但是需要测试人员全局进行验证。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<Connector acceptCount="50" connectionTimeout="20000" enableLookups="false" maxThreads="100" port="12345" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
经测试,jsp和server.xml同时修改为UTF-8编码,中文乱码问题解决。
解决方案二:
使用post方式提交并弹出新页面,增加方法openWindowWithPost,采用此方法,提交的新页面中地址栏没有参数列表,更加简洁且安全,代码如下。
/* * post方式打开新窗口 *@param url open窗口要打开的地址 *@param data 参数对象 *@param windowType 1新页签,2弹出窗口 *@param windowParam 打开窗口的参数,例如status=yes,toolbar=no,menubar=no,location=no,width=,height,top=,left= */ function openWindowWithPost(url,data,windowType,windowParam) { if($("#hideform").length > 0) { $("#hideform").remove(); } $(document.body).append('<form action="" method="post" id="hideform"></form>'); for(var i in data) { $("#hideform").append('<input type="hidden" id="'+i+'" name="'+i+'" value="'+data[i]+'"/>'); } $("#hideform").attr("action",url); var toDay = new Date(); windowname="win"+toDay.getTime(); window.open(windowType == 1 ? "about:blank" : "_blank",windowname,windowParam); $("#hideform").attr("target",windowname); $("#hideform").submit(); }使用方法也很简单,案例如下:
var data = {}; data["param1"] = "aaa"; data.param2 = true; data.param3 = 100; openWindowWithPost(url,data,1,"");
解决方案三:
前后台编解码的方式,增加工作量,对中文参数需要特殊处理。
encodeURIComponent(param1)
public static String decodeStr(String sourceStr) { if(!StringUtil.IsEmpty(sourceStr)) { try { sourceStr = URLDecoder.decode(sourceStr, "UTF-8"); } catch (UnsupportedEncodingException e) { } } return sourceStr; }
相关推荐
程序员俱乐部 2020-06-08
maowenbei 2020-06-04
jjddrushi 2020-05-14
maowenbei 2020-05-06
baynkbtg 2020-04-11
jjddrushi 2020-03-26
huavhuahua 2020-03-03
程序员俱乐部 2020-02-24
lengyu0 2020-02-22
程序员俱乐部 2020-02-17
jianghero 2020-02-14
jjddrushi 2020-02-11
jjddrushi 2020-01-23
baynkbtg 2020-01-14
baynkbtg 2020-01-10
jjddrushi 2019-12-27
MrHaoNan 2019-12-26
baynkbtg 2019-12-05
yidaizongshi 2013-09-18