在做web前端頁(yè)面的時(shí)候,經(jīng)常碰到傳中文問(wèn)題。網(wǎng)上有許多方案,但仍不能根治,最終要用js或者java的encode相關(guān)方法。
常規方案有三部:
1.改tomcat的server.xml中URIEncodeing為utf-8
2.頁(yè)面中編碼設置為utf-8
3.整個(gè)項目編碼使用utf-8
我這樣處理后,在火狐下,不會(huì )出現亂碼,但IE中奇數個(gè)中文時(shí)仍有亂碼。不過(guò)可以通過(guò)在頁(yè)面中用URLEncoder.encode()方法解決,但如果在jsp頁(yè)面里用<%=java.net.URLEncoder.encode(request.getAttribute('xxx'))%>又顯得繁瑣且不美觀(guān)。
索性自己寫(xiě)個(gè)自定義標簽來(lái)處理
使用此方法就不會(huì )再出現IE奇數個(gè)漢字成亂碼的問(wèn)題了,不多說(shuō),上代碼
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;
-
- public void setKey(Object key) throws JspException {
- this.key=ExpressionEvaluatorManager.evaluate("key", key.toString(), Object.class, this, pageContext);
-
- }
- public int doEndTag() {
- try {
- 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>
-