您当前位置:设计在线网 >> JavaScript >> 浏览文章

基于XMl文件中的左右尖括号介绍

分享到:
本文章讲述了基于XMl文件中的左右尖括号介绍.

在项目

测试阶段,测试人员会输入一些特殊字符,比如:、字符时,页面就会出现错误, 如果是导出,导出的Excel也会出现问题,或者直接输出的页面会把用户输入的、&及 都转化成、&及空格,原因是用java代码直接取的并没有对特殊字符做转义。

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

& 的转义序列为 & amp 或 & #38;

转义序列为 & lt; & #60;

> 的转义序列为 & gt; & #62;

前者为字符转义序列,后者为数字转义序列。

例如 & lt; font >显示为,若直接写为则被认为是一个链接签。

需要说明的是:

a. 转义序列各字符间不能有空格;

b. 转义序列必须以“;”结束;

c. 单独的&不被认为是转义开始。

d. 区分大小写

另一个需要转义的字符是双引号””,它的转义序列为"或"

这里需要特殊注意的是一定要对&进行转义,有的朋友只对甚至引号转义,但并没有对&进行转义,&是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, "&", "&");

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

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

strData = replaceString(strData, "\"", """);

return strData;

}

/**

* 还原字符串中特殊字符

*/

public static String decodeString(String strData)

{

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

strData = replaceString(strData, "'", "'");strData = replaceString(strData, """, "\"");strData = replaceString(strData, "&", "&");return strData;} 第一个函数replaceString转义单个字符,第二个函数encodeString为转义包括&、、’和\这几个特殊字符,第三个函数decodeString是还原这几个特殊字符。

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

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

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

推荐阅读:
调用引用该ActiveX的网页中的JavaScript函数
JAVA反射机制主要功能介绍
JAVA解惑系列--final、finally和finalize的区别
推荐文章  
赞助商链接  
热门排行  
主题推广  
中国设计在线网 All Rights Reserved. 互联网违法和不良信息举报
信息产业部备案号:湘ICP备09001063号