Mar*_*sen 3 c# xml unicode control-characters
我有一个接受用户HTML输入的网页.使用System.Xml命名空间将输入转换为xml文档,如下所示:
var doc = new XmlDocument();
doc.AppendChild(doc.CreateElement("root"));
doc.DocumentElement.SetAttribute("BodyHTML", theTextBox.Text);
Run Code Online (Sandbox Code Playgroud)
然后System.Xml.Xsl.XslCompiledTransform对数据使用Xsl转换().
用户倾向于使用项目符号,引号等在Microsoft Word中编写文本.粘贴到我的页面时,其文本包含无效字符,如0x0C,0x03等.使用xsl转换时,会出现此错误"十六进制值0x0C,是无效字符".
到目前为止,我的修复方法是消除我发现的令人反感的字符,使用循环和String.Replace:0到31之间的所有字符,除了9,10和13都被替换为String.Empty.
我正在寻找的是一种更好的方法.内置的.Net方法?或者只是一个非法unicode字符的完整列表.
找到两个做同样事情的答案
第一个使用StringBuilder,逐个循环遍历字符并过滤掉非法字符.第二个使用Regex和.Replace来完成同样的事情.两位作者都查看了Xml标准,以找出哪些字符是非法的.
我在一个长字符串上做了一些计时(1.8 MB文件运行1000次)和一个短字符串("Hello world"运行10,000,000次).StringBuilder方法比正则表达式快3倍.正则表达式当然只编译一次,不像我链接的代码.
长串:
CleanInvalidXmlChars time: 00:00:07.4356230
SanitizeXmlString time: 00:00:02.3703305
Run Code Online (Sandbox Code Playgroud)
短串:
CleanInvalidXmlChars time: 00:00:05.2805834
SanitizeXmlString time: 00:00:01.8319114
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5952 次 |
| 最近记录: |