Как удалить недопустимые шестнадцатеричные символы из источника данных на основе XML перед созданием XmlReader или XPathDocument, использующих эти данные?
Мне нравится концепция белого form-validation списка Юджина. Мне нужно validate было сделать то же самое, что visual-c# и исходный плакат, но мне encoding нужно было поддерживать все c#-language символы Unicode, а не только validations до 0x00FD. Спецификация XML:
Char encoding = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# x10000- # x10FFFF]
В c-sharp .NET внутреннее представление validations символов Юникода составляет validations всего 16 бит, поэтому мы encodings не можем явно `разрешить visual-c# '0x10000-0x10FFFF. Спецификация xml-file XML явно запрещает появление суррогатных c# кодовых точек, начинающихся input-validation с 0xD800. Однако возможно, что, если input-validation мы позволим эти суррогатные encodings кодовые точки в нашем белом visual-c# списке, кодировка utf-8 нашей validate строки может привести к получению c#-language допустимого XML в конце, если encodings правильная кодировка utf-8 xml была произведена из суррогатных c#.net пар символов utf-16 в Строка form-validation .NET. Однако я не исследовал c# это, поэтому я сделал более xml безопасную ставку и не разрешил c-sharp суррогаты в моем белом списке.
Комментарии xml в решении Юджина вводят в validations заблуждение, проблема в том, что encodings символы, которые мы исключаем, недействительны csharp в XML ... они являются совершенно c-sharp допустимыми кодовыми точками encoding Unicode. Мы не удаляем символы, отличные validator от UTF-8. Мы удаляем символы form-validation utf-8, которые могут не отображаться validations в правильно сформированных csharp 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, нажмите здесь.