最近SSH有个乱码问题。大概问题如下:
<table width="100%" align="center" border="1" class="tb3">
<tr class="gridtitle">
<td height="20px">角色ID</td>
<td>角色名称</td>
<td>英文名称</td>
<td>角色描述</td>
<td style="color:#FF0000" align="center">删除</td>
<td style="color:#FF0000" align="center">修改</td>
<td style="color:#FF0000" align="center">配置权限</td>
</tr>
<s:iterator value="pagebean.list" status="index" var="it">
<s:if test="#index.odd == true">
<tr class="gridspan" >
</s:if>
<s:else>
<tr>
</s:else>
<td>
<s:property value="roleid"/>
</td>
<td><s:property value="rolenamecn"/></td>
<td><s:property value="rolenameen"/></td>
<td><s:property value="roledescription"/></td>
<td align="center">
<s:a href="roledelete.action?role.roleid=%{#it.roleid}" οnclick="return del();">
<img src="<%=request.getContextPath() %>/images/btnImg/btn_delete2.gif" border="0" />
</s:a>
</td>
<td align="center">
<s:a href="getupdate.action?role.roleid=%{#it.roleid}">
<img src="<%=request.getContextPath() %>/images/btnImg/btn_update.gif" border="0" />
</s:a>
</td>
<td align="center">
<!--问题出在这里 -->
<s:a href="rolepermitselect.action?rolebean.roleid=%{#it.roleid}&rolebean.rolenamecn=%{#it.rolenamecn}">
<img src="<%=request.getContextPath() %>/images/btnImg/btn_power.gif" border="0" />
</s:a>
</td>
</tr>
代码中<s:a href="rolepermitselect.action?rolebean.roleid=%{#it.roleid}&rolebean.rolenamecn=%{#it.rolenamecn}">页面的内容不是乱码,但是传到后台变成乱码。原因是中文没有转码导致的。
解决方法:
1:修改server.xml
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
加入URIEncoding="UTF-8" 如果你用的是eclipse新建的server而不是tomcat插件的话,最好把servers里面的server.xml 和 tomcat/conf下面的server.xml也改了,测试的时候注意重新发布下,要耐心点,我就是因为测试快了,只是重新启动tomcat导致没测好,结果没有变。后来重新测试下 才起作用。
2.屡试不爽的js encodeURI 和 decodeURI
<head>
<script type="text/javascript">
var arg1=obj.parentNode.parentNode.cells[0].innerHTML;
arg1=arg1.replace(/\s/g,'');
var arg2=obj.parentNode.parentNode.cells[1].innerHTML;
//arg2=encodeURI(encodeURI(arg2));
var url="rolepermitselect!select?rolebean.roleid="+arg1+"&rolebean.rolenamecn="+arg2;
alert(url);
window.location.href = url;
return true;
</script>
</head>
<td align="center">
<s:a href="javaScript:void(0);" οnclick="changeRolePermit(this);">
<img src="<%=request.getContextPath()%>/images/btnImg/btn_power.gif" border="0" />
</s:a>
</td>
在后台用java.net.URLDecoder
rolebean.setRolenamecn(URLDecoder.decode(rolebean.getRolenamecn(), "utf-8"));
3.基本的编码问题。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><br /
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
后台 request.setEncoding("utf8")