XML 非法字元
在寫入或讀取XML 檔案時,需要注意對非法字元的過濾
根據W3C的標準,以下16進位制的字元是不被允許出現在XML檔案中的,即使放在<![CDATE[]]> 中,也不能倖免遇難
所以,需要對在這3個範圍段的字元進行排除
可利用.NET中 Regex的 Replace 方法對字串中在這3個範圍段的字元進行替換,如:
string content = "as fas fasfadfasdfasdf<234234546456";
content = Regex.Replace(content, "[//x00-//x08//x0b-//x0c//x0e-//x1f]", "*");
Response.Write(content);
這樣就OK了,如果你還不放心,可以對 <,>,&,'," 這5個符號進行一下特殊處理,即:
< <
> >
& &
' '
" "
Java處理程式碼
/**
* 使用d替代非法字元.
* @param text
* @param d
* @return
*/
public static String replaceInvaldateCharacter(String text, char d) {
if (text != null) {
char[] data = text.toCharArray();
for (int i = 0; i < data.length; i++) {
if(!isXMLCharacter(data[i]))
data[i] = d;
}
return new String(data);
}
return "";
}
/**
* 使用空格替代非法字元.
* @param text
* @return
*/
public static String replaceInvaldateCharacter(String text) {
return replaceInvaldateCharacter(text, (char)0x20);
}
/**
* 檢查字元是否為合法的xml字元
* XML規範中規定了允許的字元範圍(
* Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
* @param c
* @return
*/
private static boolean isXMLCharacter(int c) {
if (c <= 0xD7FF) {
if (c >= 0x20)
return true;
else
return c == '/n' || c == '/r' || c == '/t';
}
return (c>=0xE000 && c<= 0xFFFD) || (c>=0x10000 && c<= 0x10FFFF);
}
經過非法字元的替換處理後,包含非法XML字元的郵件可以正常閱讀。
綜上所述,對於wml出現的內容,需要做以下處理:
1、替換非法的XML字元
2、對於可能出現’<’,’/’,’&’,’>’等字元的內容需要進行轉義字元替換,或者使用CDATA包起來