1. 程式人生 > >過濾XML中的非法字元

過濾XML中的非法字元

在用Dom4J處理XML檔案時,丟擲了這個異常:

An invalid XML character (Unicode: 0x8) was found in the CDATA section.

通過Google的快取裡面找到了一個解決辦法,原文連結(http://zongfeng.bloghome.cn/posts/77742.html )現在訪問不了。文章裡說,

一般xml中如果含有&等字元,可以通過CDATA來過濾,但是含有一些不認識的特殊字元時候就會不起作用,下面是從別人那兒拿來的一個過濾方法,過濾xml中的非法字元:
//XML標準規定的無效位元組為:

/*
0x00 – 0x08
0x0b – 0x0c
0x0e – 0x1f
*/

//所以很簡單,輸出的時候過濾這些字元就萬無一失了,下面是PHP的實現。

/* PHP 實現 */
function XmlSafeStr($s)
{
return preg_replace(“/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/”,”,$s);
}

W3C的XML規範中關於字元的定義請參看這裡:http://www.w3.org/TR/2004/REC-xml-20040204/#charsets
過濾非法字元對應的Java版本如下:

    public String filter(String s)
    {
        return s.replaceAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", "");
    }