`

xml特殊字符转义技术

    博客分类:
  • java
 
阅读更多

在项目测试阶段,测试人员会输入一些特殊字符,比如:<table>、<./或<这样的字符时,页面就会出现错误, 如果是导出,导出的Excel也会出现问题,或者直接输出的页面会把用户输入的<、>、&及 都转化成<、>、&及空格,原因是用java代码直接取的并没有对特殊字符做转义。
     因为Html中的<, >,&有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用它们的转义序列。

 

   & 的转义序列为 & amp 或 & #38;
   < 的转义序列为 & lt; & #60;
   > 的转义序列为 & gt; & #62;
  前者为字符转义序列,后者为数字转义序列。


  例如 & lt; font >显示为<font>,若直接写为则被认为是一个链接签。
  需要说明的是:
    a. 转义序列各字符间不能有空格;
    b. 转义序列必须以“;”结束;
    c. 单独的&不被认为是转义开始。
    d. 区分大小写  
     另一个需要转义的字符是双引号””,它的转义序列为"或"
     这里需要特殊注意的是一定要对&进行转义,有的朋友只对<、>甚至引号转义,但并没有对&进行转义,&是Html转义字符的开始,如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以必须要对&进行转义。
解决方法是定义个工具类Tools。

     

      

Java代码  收藏代码
  1. /** 
  2.   * 替换一个字符串中的某些指定字符 
  3.   * @param strData String 原始字符串 
  4.   * @param regex String 要替换的字符串 
  5.   * @param replacement String 替代字符串 
  6.   * @return String 替换后的字符串 
  7.   */  
  8.  public static String replaceString(String strData, String regex,  
  9.          String replacement)  
  10.  {  
  11.      if (strData == null)  
  12.      {  
  13.          return null;  
  14.      }  
  15.      int index;  
  16.      index = strData.indexOf(regex);  
  17.      String strNew = "";  
  18.      if (index >= 0)  
  19.      {  
  20.          while (index >= 0)  
  21.          {  
  22.              strNew += strData.substring(0, index) + replacement;  
  23.              strData = strData.substring(index + regex.length());  
  24.              index = strData.indexOf(regex);  
  25.          }  
  26.          strNew += strData;  
  27.          return strNew;  
  28.      }  
  29.      return strData;  
  30.  }  
  31.   
  32.  /** 
  33.   * 替换字符串中特殊字符 
  34.   */  
  35. ublic static String encodeString(String strData)  
  36.  {  
  37.      if (strData == null)  
  38.      {  
  39.          return "";  
  40.      }  
  41.      strData = replaceString(strData, "&""&amp;");  
  42.      strData = replaceString(strData, "<""&lt;");  
  43.      strData = replaceString(strData, ">""&gt;");  
  44.      strData = replaceString(strData, "&apos;""&apos;");  
  45.      strData = replaceString(strData, "\"""&quot;");  
  46.      return strData;  
  47.  }  
  48.   
  49.  /** 
  50.   * 还原字符串中特殊字符 
  51.   */  
  52. public static String decodeString(String strData)  
  53.  {  
  54.      strData = replaceString(strData, "&lt;""<");  
  55.      strData = replaceString(strData, "&gt;"">");  
  56.      strData = replaceString(strData, "&apos;""&apos;");  
  57.      strData = replaceString(strData, "&quot;""\"");  
  58.      strData = replaceString(strData, "&amp;""&");  
  59.      return strData;  
  60.  }  

 

 

 

      第一个函数replaceString转义单个字符,第二个函数encodeString为转义包括&、<、>、’和\这几个特殊字符,第三个函数decodeString是还原这几个特殊字符。
因此在需要转义的时候调用Tools. encodeString()就可以了。


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


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

 

分享到:
评论

相关推荐

    Mybatis在Mapper.xml文件中的转义字符处理方式.pdf

    然而,在XML中直接使用一些特殊字符,比如大于(&gt;)、小于(&lt;)、等于(=)、单引号(')和双引号(")等,可能会导致XML解析错误,因为这些字符在XML文档中有特定的含义。为了解决这个问题,Mybatis提供了一些处理...

    xml中的特殊字符替换

    在XML(可扩展标记语言)中,特殊字符的处理是一项重要的技术细节,它直接关系到文档的正确解析和展示。由于XML是一种用于标记文本的元语言,它使用一系列的规则来定义数据结构和数据类型,因此,对于XML文档中可能...

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    为防止这种情况,我们需要对特殊字符进行转义,例如将`转义为`&lt;`,`&gt;`转义为`&gt;`,`"`转义为`&quot;`,`'`转义为`&apos;`,`&`转义为`&amp;`,`\`转义为`\`。 2. **Spring MVC的解决方案**: - Spring MVC...

    js的XML解析器 可以解析XMl文件和XML字符串

    - **特殊字符**:XML文档中可能存在特殊字符,如`、`&gt;`、`&`等,这些在XML中具有特殊含义,需要正确转义。如果未正确处理,可能导致解析错误。 - **浏览器兼容性**:描述中提到的谷歌浏览器的XML解析问题可能是指...

    XML 技术概述文档

    如果属性值中包含特殊字符,可以使用 HTML 实体进行转义,例如 `可以写作 `&lt;`: ```xml ;04/12/2006&gt;"&gt; ``` XML 文档类型定义(DTD,Document Type Definition)用于定义 XML 文档的结构和元素的约束。DTD ...

    利用ascii码传输xml转义字符示例

    在信息技术领域,尤其是Web开发和数据传输方面,经常会遇到需要通过XML格式传输特殊字符或加密数据的情况。XML能够传输大部分的可见字符,但是一些特殊的控制字符(如换行符\n、制表符\t等)以及某些特殊符号(如&lt;、...

    web的xml技术

    - **避免转义特殊字符**:使用CDATA段包装文本。 - **格式如**:`&lt;![CDATA[...]]&gt;`。 #### XML编码 - **支持多种字符集**:如UTF-8、UTF-16等。 - **声明字符编码**:`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`。 ...

    XML教学完整PPT

    这包括但不限于:每个XML文档必须有一个根元素,元素标签必须正确闭合,特殊字符需要转义等。此外,XML还支持命名空间(Namespaces),以避免标签名冲突。 XML解析器是处理XML文档的关键,分为DOM(Document Object...

    小程序解析Xml

    2. 数据转换:可能需要对XML数据进行预处理,比如将特殊字符转义,以适应小程序的显示规则。 3. 性能优化:大量XML数据可能导致性能问题,可以考虑分段加载或使用虚拟列表来提高用户体验。 4. 样式控制:对于HTML...

    xml入门教程/xml入门教程

    - 特殊字符需要用实体引用。 #### 7. 字符转义与引用 - **字符转义**:`&lt;`表示`,`&gt;`表示`&gt;`,`&amp;`表示`&`,`&quot;`表示`"`,`&apos;`表示`'`。 - **引用**:使用实体声明来创建引用,例如`&lt;!ENTITY ...

    XMl背景简介与用途

    7. 特殊字符需要转义,例如"&"用"&amp;","用"&lt;","&gt;"用"&gt;"等。 XML还支持字符数据段(CDATA段),它允许在元素中包含不受解析的文本。实体声明则允许定义和使用特殊字符或字符串的引用。 XML的验证通常通过...

    JAVA 版的XML编程的PPT

    3. **命名规则**:XML元素和属性名遵循严格的命名规则,如必须以字母或下划线开头,不能包含空格或特殊字符等。 **二、XML解析** 1. **DOM解析**:Document Object Model(DOM)模型将整个XML文档加载到内存中,...

    xml编码和解密代码

    XML编码仅处理特殊字符,但不涉及安全性。如果需要加密XML内容,可以使用如AES(Advanced Encryption Standard)等加密算法。在C++中,可以使用开源库如Crypto++或Botan来实现。首先,你需要将XML字符串转换为字节...

    Javascript格式化并高亮xml字符串的方法及注意事项

    当使用DOMParser解析XML时,需要注意一些特殊字符可能会导致解析错误。例如,未转义的尖括号 `和 `&gt;` 或 ampersand `&` 等。因此,确保在输入XML字符串之前正确转义这些字符至关重要。 总的来说,通过DOMParser和...

    将INI文件转换成XML

    3. **处理特殊字符**:XML有预定义的字符实体,如`&`应转为`&amp;`,所以在转换过程中,需要对值进行适当的转义。 4. **生成XML输出**:最后,将构建的XML元素树序列化成字符串,输出为XML文件。 在标签“DTD/XML ...

    xml教程<<无废话xml>>

    [CDATA[...]]&gt;`可以避免转义字符的使用,方便包含大量特殊字符的数据的处理。 #### 5. 注释 - XML支持注释,格式为`&lt;!-- 这是一个注释 --&gt;`。 ### XML的应用 #### 1. 数据交换 - XML因其标准化和可扩展性,广泛...

    XML入门(简单易学的电子书)

    为了在XML文档中包含这些特殊字符,可以使用字符实体引用,例如: ```xml &lt;元素名&gt;元素文本或值&lt;元素名&gt; ``` 其中,"&lt;"代表小于号",是为了避免与XML标签冲突而采用的转义字符。 空元素(empty elements)...

    Map转换成xml

    - **特殊字符处理**:XML有特定的字符规则,例如`, `&gt;`, `&`等需要被转义。 - **性能考虑**:对于大数据量的`Map`,递归转换可能会影响性能,需优化算法或使用更高效的库。 #### 五、总结 将`Map`转换为XML不仅...

    xml基础教程(非常经典)

    `代表`'`,用于转义特殊字符。 8. **处理指令**:处理指令(Processing Instructions, PI)如`&lt;?target data?&gt;`,用于向处理XML文档的应用程序提供指令。 XML与HTML的主要区别在于,HTML专注于展示,而XML专注于...

    一个经典的xml作业

    CDATA(Character Data)用于标记一段文本,让解析器将其当作纯文本处理,不进行特殊字符转义。 8.实体(Entity): XML中的实体可以是预定义的(如`&amp;`代表`&`),也可以自定义,用于插入特殊字符或引用外部...

Global site tag (gtag.js) - Google Analytics