过虑xml非法字符

xml中需要过滤的字符分为两类,一类是不允许出现在xml中的字符,这些字符不在xml的定义范围之内。另一类是xml自身要使用的字符,如果内容中有这些字符则需被替换成别的字符。
第一类字符

对于第一类字符,我们可以通过W3C的XML文档来查看都有哪些字符不被允许出现在xml文档中。
XML允许的字符范围是“#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]”。因此我们可以把这个范围之外的字符过滤掉。
需要过滤的字符的范围为:
\\x00-\\x08
\\x0b-\\x0c
\\x0e-\\x1f
利用.NET中 Regex的 Replace 方法对字符串中在这3个范围段的字符进行替换,如:
string content = “as fas fasfadfasdfasdf<234234546456”;
content = Regex.Replace(content, “[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]”, “*”);
Response.Write(content);
利用PB8,对这个范围的字符进行过滤如下:
string content = “as fas fasfadfasdfasdf<234234546456”;
int i_count_eliminate=30
char i_spechar_eliminate[]={“~001” , “~002” , &
“~003” , “~004” , “~005” , “~006” , “~007” , &
“~008” , “~011” , “~012” , “~014” , “~015” , &
“~016” , “~017” , “~018” , “~019” , “~020” , &
“~021” , “~022” , “~023” , “~024” , “~025” , &
“~026” , “~027” , “~028” , “~029” , “~030” , &
“~031” , ‘”‘    , “`”  } //需要消除的字符,将直接替换为空
for vi=1 to i_count_eliminate
vpos=1
vlen=lenw(i_spechar_eliminate[vi])
do while true
vpos = posw(content,i_spechar_eliminate[vi],vpos)
if vpos<1 then exit
content=replacew(content,vpos,vlen,””)
loop
next
第二类字符

对于第二类字符一共有5个,如下:
字符                HTML字符        字符编码
和(and) &        &amp;            &#38;
单引号  ‘ &apos;            &#39;
双引号  ”          &quot;            &#34;
大于号  >        &gt;                  &#62;
小于号  <        &lt;                   &#60;
我们只需要对这个五个字符,进行相应的替换就可以了

转载请注明原文出处《过虑xml非法字符》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。

6条回复 发表于 “过虑xml非法字符”上

  1. DK says:

    我貌似没用到过非法的字符啊,哈哈

    [回复]

    wgforward 说:

    平时一般都不会产生这些看不到的特殊字符。不过,我们的老数据库里面有这些字符,如果不过滤就会报解析xml失败

    [回复]

    DK 说:

    @wgforward, 比较苦恼了就~

    [回复]

  2. Boldy says:

    Ugh, I liked! So clear and positively.
    Thank you
    [url=http://www.pscdns.biz/]Boldy[/url]

    [回复]

    wgforward 说:

    @Boldy, you are welcome!Thank you for coming here!

    [回复]

  3. Mr Speaker says:

    Your web site has really been helpful to me and I thank you for your time and effort working on it. Good Luck! 🙂

    [回复]

我要评论