日期:2014-05-16 浏览次数:20316 次
在做web前端页面的时候,经常碰到传中文问题。网上有许多方案,但仍不能根治,最终要用js或者java的encode相关方法。
常规方案有三部:
1.改tomcat的server.xml中URIEncodeing为utf-8
2.页面中编码设置为utf-8
3.整个项目编码使用utf-8
?
我这样处理后,在火狐下,不会出现乱码,但IE中奇数个中文时仍有乱码。不过可以通过在页面中用URLEncoder.encode()方法解决,但如果在jsp页面里用<%=java.net.URLEncoder.encode(request.getAttribute('xxx'))%>又显得繁琐且不美观。
?
索性自己写个自定义标签来处理
使用此方法就不会再出现IE奇数个汉字成乱码的问题了,不多说,上代码
?
?
EncodeTag.java
?
package mypackage.util; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; public class EncodeTag extends TagSupport { private Object key;//自定义标签的key属性 public void setKey(Object key) throws JspException { this.key=ExpressionEvaluatorManager.evaluate("key", key.toString(), Object.class, this, pageContext); } public int doEndTag() { try {// 使用JspWriter获得JSP的输出对象 JspWriter jspWriterOutput = pageContext.getOut(); jspWriterOutput.write(URLEncoder.encode(key.toString(),"utf-8")); } catch (IOException ioEx) { System.out.println("IOException in HelloTag " + ioEx); } return EVAL_PAGE; } }
?
encode.tld(此文件需放在你的web项目的src目录下)
?
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>JSTL 1.1 core library</description> <display-name>JSTL core</display-name> <tlib-version>1.1</tlib-version> <short-name>en</short-name> <uri>http://www.xxx.org/util/url/encode</uri> <tag> <name>urlEncode</name> <tag-class>mypackage.util.EncodeTag</tag-class> <body-content>empty</body-content> <attribute> <name>key</name> <rtexprvalue>true</rtexprvalue> <type>java.lang.Object</type> </attribute> </tag> </taglib>
?
在jsp中头部引入
?
<%@ taglib uri="http://www.xxx.org/util/url/encode" prefix="en" %>
?
在jsp中使用
<a href="xxx/xxx.do?key=<en:urlEncode key="${obj.key}"/>">xxxx</a></div>