web测试中,程序一般会用到xml文件的生成,解析等步骤.而对于xml转义字符的处理则应该作为一个测试点:
一 xml的转义字符:
HTML中<, >,&等有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用它们的转义序列,如下所示:
一般java程序中需要经过如下类的处理:
package util;
public class XML {
/**
* @param dangerous
* @return harmless
*/
public static String escape (String dangerous){
// TODO this still slightly inefficient - improve
// TODO maybe: in some usages, Strings may be passed in
// that already contain & and such. respect those?
if( dangerous.indexOf("&") == -1 &&
dangerous.indexOf("/"") == -1 &&
dangerous.indexOf("'") == -1 &&
dangerous.indexOf("<") == -1 &&
dangerous.indexOf(">"") == -1
) {
return dangerous;
} else {
dangerous = dangerous.replaceAll("&" , "&" );
dangerous = dangerous.replaceAll("/"", """);
dangerous = dangerous.replaceAll("'" , "'");
dangerous = dangerous.replaceAll("<" , "<" );
dangerous = dangerous.replaceAll(">" , ">" );
return dangerous;
}
}
public static void main(String[] args){
String dangerous="this is >";
System.out.println(XML.escape(dangerous));
}
}
一 xml的转义字符:
HTML中<, >,&等有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用它们的转义序列,如下所示:
& 或 & | & | 和 | |||
< 或 < | < | 小于号 | |||
> 或 > | > | 大于号 | |||
" | " | 双引号 |
| ||
|
| 空格 | |||
© | © | 版权符 | |||
® | ® | 注册符 |
前者为字符转义序列,后者为数字转义序列。数字转为字符对应的ASCII码值。例如 & lt; font >显示为,<font>,若直接写为则被认为是一个链接签。
需要说明的是:
a. 转义序列各字符间不能有空格;
b. 转义序列必须以";"结束;
c. 单独的&不被认为是转义开始;
d.区分大小写。
另一个需要转义的字符是引号,它的转义序列为"" "或"""
HTML使用的字符集是ISO &859 Larin-1字符集,该字符集中有许多标准键盘上无法输入的字符。对这些特殊字符只能使用转义序列。
二 java代码中应该做的一般java程序中需要经过如下类的处理:
package util;
public class XML {
/**
* @param dangerous
* @return harmless
*/
public static String escape (String dangerous){
// TODO this still slightly inefficient - improve
// TODO maybe: in some usages, Strings may be passed in
// that already contain & and such. respect those?
if( dangerous.indexOf("&") == -1 &&
dangerous.indexOf("/"") == -1 &&
dangerous.indexOf("'") == -1 &&
dangerous.indexOf("<") == -1 &&
dangerous.indexOf(">"") == -1
) {
return dangerous;
} else {
dangerous = dangerous.replaceAll("&" , "&" );
dangerous = dangerous.replaceAll("/"", """);
dangerous = dangerous.replaceAll("'" , "'");
dangerous = dangerous.replaceAll("<" , "<" );
dangerous = dangerous.replaceAll(">" , ">" );
return dangerous;
}
}
public static void main(String[] args){
String dangerous="this is >";
System.out.println(XML.escape(dangerous));
}
}