Html和Excel字符转义技术

转载 2007年09月20日 16:11:00

      在项目测试阶段,测试人员会输入一些特殊字符,比如:<table><./&lt;这样的字符时,页面就会出现错误, 如果是导出,导出的Excel也会出现问题,或者直接输出的页面会把用户输入的&lt;&gt;&amp;&nbsp;都转化成<>&及空格,原因是用java代码直接取的并没有对特殊字符做转义。

       因为Html中的<, >&有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用它们的转义序列。

   & 的转义序列为 & amp & #38
     < 的转义序列为 & lt; & #60
     > 的转义序列为 & gt; & #62
  前者为字符转义序列,后者为数字转义序列。
  例如 & lt; font &gt;显示为<font>,若直接写为则被认为是一个链接签。
  需要说明的是:
    a. 转义序列各字符间不能有空格;
    b. 转义序列必须以“;”结束;
    c. 单独的&不被认为是转义开始。
    d. 区分大小写  

另一个需要转义的字符是双引号””,它的转义序列为&quot;&#34;

这里需要特殊注意的是一定要对&进行转义,有的朋友只对<>甚至引号转义,但并没有对&进行转义,&Html转义字符的开始,如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以必须要对&进行转义。

解决方法是定义个工具类Tools

 

/**

     * 替换一个字符串中的某些指定字符

     * @param strData String 原始字符串

     * @param regex String 要替换的字符串

     * @param replacement String 替代字符串

     * @return String 替换后的字符串

     */

    public static String replaceString(String strData, String regex,

            String replacement)

    {

        if (strData == null)

        {

            return null;

        }

        int index;

        index = strData.indexOf(regex);

        String strNew = "";

        if (index >= 0)

        {

            while (index >= 0)

            {

                strNew += strData.substring(0, index) + replacement;

                strData = strData.substring(index + regex.length());

                index = strData.indexOf(regex);

            }

            strNew += strData;

            return strNew;

        }

        return strData;

    }

 

    /**

    * 替换字符串中特殊字符

     */

    public static String encodeString(String strData)

    {

        if (strData == null)

        {

            return "";

        }

        strData = replaceString(strData, "&", "&amp;");

        strData = replaceString(strData, "<", "&lt;");

        strData = replaceString(strData, ">", "&gt;");

        strData = replaceString(strData, "'", "&apos;");

        strData = replaceString(strData, "/"", "&quot;");

        return strData;

    }

 

    /**

     * 还原字符串中特殊字符

     */

    public static String decodeString(String strData)

    {

        strData = replaceString(strData, "&lt;", "<");

        strData = replaceString(strData, "&gt;", ">");

        strData = replaceString(strData, "&apos;", "'");

        strData = replaceString(strData, "&quot;", "/"");

        strData = replaceString(strData, "&amp;", "&");

        return strData;

    }

第一个函数replaceString转义单个字符,第二个函数encodeString为转义包括&<>/这几个特殊字符,第三个函数decodeString是还原这几个特殊字符。

因此在需要转义的时候调用Tools. encodeString()就可以了。

      需要说明的是导出Excel是比较特殊的,因为如果有<table>这样的内容,是Excel保留字的,会造成Excel表格的混乱,如果要是用这个工具类做转义的话,会出现显示出&lt;table&gt;这样的内容,它会认为这是个字符串,并且不太好再把这样的字符串转义过来,经过测试如果有像“&lt;&gt;&amp;&nbsp;”或其它的Html标签,Excel会认为这样的内容为字符串,并不会引起错误,所以我可以放心的认为只有<table>这样的内容才会引起错误。那么怎么才能解决这个问题呢,既然只有<>才会引起错误,那么何不把半角的尖括号转成全角的尖括号呢,经过测试后,发现真的可以解决,而且是个很高明的方法,因此就这样找到了解决方案。

       还有一点是,无论用户输入多少个连续的空格,在页面中显示都为一个空格,这是Html本身就有的,因为Html只认&nbsp;为标准的空格,解决方案是把普通空格转义为&nbsp;,但涉及的范围之广,影响的地方之大,是我们必须要考虑的因素,不光是像Display Tag标签和自定义的标签,而且struts本身的标签也要进行修改,这样一来,工作量大不说,不知道会不会引起这样那样的问题,而且并不影响正常运行,所以经过再三考虑,还是决定不予修改。

 

 

Html转义字符大全

  • 2017年12月06日 16:07
  • 16KB
  • 下载

HTML_转义字符

  • 2008年05月29日 16:42
  • 243B
  • 下载

html中转义字符的处理 前端和后端两种处理方式

1.apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,x...

HTML和XML中的转义字符

  • 2014年10月09日 13:40
  • 1KB
  • 下载

HTML特殊转义字符列表

  • 2015年05月11日 16:43
  • 25KB
  • 下载

html5删除线span标签,cite标签,mark标签,code标签,bdo标签,sup标签,sub标签以及常用转义字符

html5删除线span标签,cite标签,mark标签,code标签,bdo标签,sup标签,sub标签以及常用转义字符http://www.ydcss.com/archives/495...
  • ztt0918
  • ztt0918
  • 2017年03月20日 15:36
  • 367

html页面转义字符对照表

  • 2009年07月08日 11:37
  • 959KB
  • 下载

HTML H5数学符号、希腊字符、各种箭头符号、科技符号以及形状转义符号

HTML 支持的数学符号 结果 描述 实体名称 实体编号 ∀ for all ∀ ∀ ∂ part ∂ W...

将HTML特殊转义为实体字符的两种实现方式

前端开发工作中,经常需要将HTML的左右尖括号等转义成实体形式。我们不能把,&等直接显示在最终看到的网页里。需要将其转义后才能在网页上显示。 转义字符(Escape Sequence)也称字符实体(...

HTML字符实体(Character Entities),转义字符串(Escape Sequence)

HTML特殊转义字符列表 最常用的字符实体 Character Entities 显示 说明 实体名称 实体编号   半方大的空白 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Html和Excel字符转义技术
举报原因:
原因补充:

(最多只允许输入30个字)