在将字符串加载到XML文档对象之前删除所有hex字符?

我有一个xml字符串,它被发布到服务器上的ashx处理程序。 xml字符串构建在客户端,基于表单上的几个不同条目。 有时,某些用户会从其他来源复制并粘贴到Web表单中。 当我尝试使用xmldoc.LoadXml(xmlStr)将xml字符串加载到XMLDocument对象时,我得到以下exception:

 System.Xml.XmlException = {"'', hexadecimal value 0x0B, is an invalid character. Line 2, position 1."} 

在调试模式中,我可以看到流氓角色(抱歉,我不确定它的官方标题?):

我的问题是,在尝试将xml字符串加载到XMLDocument对象之前,如何清理xml字符串? 我是否需要一个自定义函数来逐个解析所有这些类型的字符,还是可以使用一些本机.NET4类来删除它们?

调试模式下的恶意字符

这里有一个使用Regex清除xml无效字符的示例:

  xmlString = CleanInvalidXmlChars(xmlString); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlString); public static string CleanInvalidXmlChars(string text) { string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]"; return Regex.Replace(text, re, ""); } 

不对错误的XML字符进行错误输出的更有效方法是在XmlReaderSettings中使用CheckCharacters标志。

 var xmlDoc = new XmlDocument(); var xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false }; using (var stringReader = new StringReader(xml)) { using (var xmlReader = XmlReader.Create(stringReader, xmlReaderSettings)) { xmlDoc.Load(xmlReader); } }