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

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

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