Как удалить недопустимые шестнадцатеричные символы из источника данных на основе 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

2022-09-16T22:15:13+00:00
Вопросы с похожей тематикой, как у вопроса:

Как удалить недопустимые шестнадцатеричные символы из источника данных на основе XML перед созданием XmlReader или XPathDocument, использующих эти данные?