分享

jsp页面超链接传中文终极解决办法

 KILLKISS 2013-07-15

在做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

 

Java代码  收藏代码
  1. package mypackage.util;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.URLEncoder;  
  5.   
  6. import javax.servlet.jsp.JspException;  
  7. import javax.servlet.jsp.JspWriter;  
  8. import javax.servlet.jsp.tagext.TagSupport;  
  9.   
  10. import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;  
  11.   
  12. public class EncodeTag extends TagSupport {  
  13.     private Object key;//自定义标签的key属性  
  14.   
  15.     public void setKey(Object key) throws JspException {  
  16.         this.key=ExpressionEvaluatorManager.evaluate("key", key.toString(), Object.classthis, pageContext);  
  17.   
  18.     }  
  19.     public int doEndTag() {  
  20.         try {// 使用JspWriter获得JSP的输出对象  
  21.             JspWriter jspWriterOutput = pageContext.getOut();  
  22.             jspWriterOutput.write(URLEncoder.encode(key.toString(),"utf-8"));  
  23.         } catch (IOException ioEx) {  
  24.             System.out.println("IOException in HelloTag " + ioEx);  
  25.         }  
  26.         return EVAL_PAGE;  
  27.     }  
  28.       
  29.   
  30. }  

 

encode.tld(此文件需放在你的web项目的src目录下)

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <taglib xmlns="http://java./xml/ns/j2ee"  
  4.     xmlns:xsi="http://www./2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java./xml/ns/j2ee http://java./xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
  6.     version="2.0">  
  7.   
  8.     <description>JSTL 1.1 core library</description>  
  9.     <display-name>JSTL core</display-name>  
  10.     <tlib-version>1.1</tlib-version>  
  11.   
  12.     <short-name>en</short-name>  
  13.   
  14.     <uri>http://www./util/url/encode</uri>  
  15.   
  16.     <tag>  
  17.   
  18.         <name>urlEncode</name>  
  19.   
  20.         <tag-class>mypackage.util.EncodeTag</tag-class>  
  21.   
  22.         <body-content>empty</body-content>  
  23.   
  24.         <attribute>  
  25.   
  26.             <name>key</name>              
  27.             <rtexprvalue>true</rtexprvalue>  
  28.             <type>java.lang.Object</type>  
  29.         </attribute>  
  30.   
  31.     </tag>  
  32.   
  33. </taglib>  

 

在jsp中头部引入

 

Java代码  收藏代码
  1. <%@ taglib uri="http://www./util/url/encode" prefix="en"  %>   

 

在jsp中使用

Java代码  收藏代码
  1. <a href="xxx/xxx.do?key=<en:urlEncode key="${obj.key}"/>">xxxx</a></div>  
  2.                               

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多