Предотвращение кодирования при использовании HTML с использованием XML :: LibXML - PullRequest
1 голос
/ 15 октября 2019

Я использую следующий код, чтобы привести в порядок фрагмент неисследованных HTML-кодов.

    perl -Mutf8 -MXML::LibXML -E'
    my $filename = "1.html";
    open $fh, "<", $filename; 
    binmode $fh;
    my $dom = XML::LibXML->load_html(
    IO  => $fh,
    recover   => 1,
    suppress_errors => 1, 
    huge => 10000000,
    );
    say $dom->toString();
    ' > tidy.html

Неисследованные коды HTML (без конечного тега </p>):

1.html:

<p>aΩ<span>test</span>

Как видите, в теге <p> есть один специальный символ Ω, после аккуратного процесса Ω кодируется как &#xCE;&#xA9; какзатем (приведенные в порядок HTML-коды):

tidy.html:

<html><body><p>a&#xCE;&#xA9;<span>test</span></p></body></html>

Могу ли я сохранить Ω в исходном виде вместо его закодированной формы в выводе tidy?

Или есть ли другие альтернативы, чтобы сделатьаккуратный процесс, который не будет кодировать специальные символы?

1 Ответ

3 голосов
/ 15 октября 2019

Проблема не совсем в том, что вы думаете.

Анализатор HTML обрабатывает ввод как Latin1, как указано в стандарте, но ваш входной файл действительно в UTF-8. Чтобы это работало, вам нужно объявить правильную кодировку , например,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
...