Я не проделал большую работу с XML, содержащим «недопустимые» символы, но
мне кажется, у вас здесь две совершенно разные проблемы.
Во-первых, в ваших данных есть символы, которые вам могут не понадобиться. Вы должны решить, что это такое и как вы хотите удалить / заменить их независимо от каких-либо ограничений XML. Например, у вас могут быть такие вещи, как x^H_y^H_z^H_
, где вы решите, что хотите убрать как клавишу возврата, так и следующий символ. Или, возможно, вы на самом деле не хотите корректировать свои данные, но чувствуете необходимость сделать это в XML.
Обновление: я сохранил следующие абзацы для потомков, но они основаны на недоразумении: я думал, что вы можете включить любой символ в данные XML, если вы правильно его кодировали, но, похоже, есть некоторые символы, которые прямой верботен,
даже закодированы? XML :: LibXML удаляет их (по крайней мере, в текущей версии), за исключением символа nul, который он обрабатывает как конец строки, отбрасывая его и все, что следует за ним: (
Во-вторых, в ваших данных могут быть символы, которые вы сохранили и которые нуждаются в кодировке в XML. В идеале, какой бы модуль XML вы ни использовали, он бы сделал это для вас, но если это не так, вы должны сделать это вручную, например:
use HTML::Entities "encode_entities_numeric";
$encoded_string = encode_entities_numeric( $string, "\x00-\x08\x0B\x0C\x0E-\x19");
Но на самом деле это просто временная мера. Используйте правильный модуль XML; см. например этот ответ .