Как удалить недопустимые шестнадцатеричные символы из источника данных на основе XML перед созданием XmlReader или XPathDocument, использующих эти данные?
Мне нравится концепция белого c-sharp списка Юджина. Мне нужно validation было сделать то же самое, что form-validation и исходный плакат, но мне validations нужно было поддерживать все validations символы Unicode, а не только csharp до 0x00FD. Спецификация XML:
Char c#.net = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# x10000- # x10FFFF]
В xml .NET внутреннее представление c-sharp символов Юникода составляет form-validation всего 16 бит, поэтому мы xml не можем явно `разрешить input-validation '0x10000-0x10FFFF. Спецификация validate XML явно запрещает появление суррогатных c-sharp кодовых точек, начинающихся encodings с 0xD800. Однако возможно, что, если form-validation мы позволим эти суррогатные validation кодовые точки в нашем белом c#-language списке, кодировка utf-8 нашей c#.net строки может привести к получению validations допустимого XML в конце, если validator правильная кодировка utf-8 c-sharp была произведена из суррогатных c# пар символов utf-16 в Строка encodings .NET. Однако я не исследовал c#.net это, поэтому я сделал более xml-file безопасную ставку и не разрешил c# суррогаты в моем белом списке.
Комментарии validator в решении Юджина вводят в encodings заблуждение, проблема в том, что validation символы, которые мы исключаем, недействительны xml в XML ... они являются совершенно validation допустимыми кодовыми точками xml Unicode. Мы не удаляем символы, отличные validate от UTF-8. Мы удаляем символы form-validation utf-8, которые могут не отображаться csharp в правильно сформированных validations XML-документах.
public static string XmlCharacterWhitelist( string in_string ) {
if( in_string == null ) return null;
StringBuilder sbOutput = new StringBuilder();
char ch;
for( int i = 0; i < in_string.Length; i++ ) {
ch = in_string[i];
if( ( ch >= 0x0020 && ch <= 0xD7FF ) ||
( ch >= 0xE000 && ch <= 0xFFFD ) ||
ch == 0x0009 ||
ch == 0x000A ||
ch == 0x000D ) {
sbOutput.Append( ch );
}
}
return sbOutput.ToString();
}
c#
xml
validation
encoding
Как удалить недопустимые шестнадцатеричные символы из источника данных на основе XML перед созданием XmlReader или XPathDocument, использующих эти данные?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.