Hallo in die Runde,
ich möchte etwaige Fehler in XMLs beheben, bevor ich diese in dem Parser lade.
Delphi-Quellcode:
function CleanInvalidXmlChars(const AText: String): String;
var RegexObj: TRegExpr;
begin
RegexObj := TRegExpr.Create;
try
RegexObj.Expression :=
'[\xC0-\xC1] # Invalid UTF-8 Bytes '+
'| [\xF5-\xFF] # Invalid UTF-8 Bytes '+
'| [\xE0[\x80-\x9F] # Overlong encoding of prior code point'+
'| [\xF0[\x80-\x8F] # Overlong encoding of prior code point'+
'| [\xC2-\xDF][?![\x80-\xBF]] # Invalid UTF-8 Sequence Start'+
'| [\xE0-\xEF][?![\x80-\xBF]{2}] # Invalid UTF-8 Sequence Start'+
'| [\xF0-\xF4][?![\x80-\xBF]{3}] # Invalid UTF-8 Sequence Start'+
'| [?<=[\x00-\x7F\xF5-\xFF]][\x80-\xBF] # Invalid UTF-8 Sequence Middle'+
'| [?<![\xC2-\xDF]|[\xE0-\xEF]|[\xE0-\xEF][\x80-\xBF]|[\xF0-\xF4]|[\xF0-\xF4][\x80-\xBF]|[\xF0-\xF4][\x80-\xBF]{2}][\x80-\xBF]] # Overlong Sequence'+
'| [?<=[\xE0-\xEF]][\x80-\xBF][?![\x80-\xBF]] # Short 3 byte sequence'+
'| [?<=[\xF0-\xF4]][\x80-\xBF][?![\x80-\xBF]{2}] # Short 4 byte sequence'+
'| [?<=[\xF0-\xF4][\x80-\xBF]][\x80-\xBF][?![\x80-\xBF]] # Short 4 byte sequence (2)';
result := RegexObj.Replace(AText, '', true);
finally
RegExObj.Free;
end;
end;
Dazu nutze ich folgenden Ausdruck.
Die Quelle für den String ist folgende:
https://www.ryadel.com/en/php-skip-i...l-file-string/
Leider meckert die Regexp Bibliothek dass der "Modifier urecognized" ist. Für mich sind reguläre Ausdrücke so etwas wie böhmische Dörfer. Hat jemand vielleicht eine Idee was da falsch ist?
Peter