过虑xml非法字符
wgforward 于2010,01,25发表 | 6 评论 »
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) & & &
单引号 ‘ ' '
双引号 ” " "
大于号 > > >
小于号 < < <
我们只需要对这个五个字符,进行相应的替换就可以了
转载请注明原文出处《过虑xml非法字符》 如无特别声明,所有文章均遵守创作共用 署名-非商业-禁止演绎 3.0协议。
分类: 编程 |
我貌似没用到过非法的字符啊,哈哈
[回复]
平时一般都不会产生这些看不到的特殊字符。不过,我们的老数据库里面有这些字符,如果不过滤就会报解析xml失败
[回复]
@wgforward, 比较苦恼了就~
[回复]
Ugh, I liked! So clear and positively.
Thank you
[url=http://www.pscdns.biz/]Boldy[/url]
[回复]
@Boldy, you are welcome!Thank you for coming here!
[回复]
Your web site has really been helpful to me and I thank you for your time and effort working on it. Good Luck! 🙂
[回复]