Как я могу получить PreMailer. Net, чтобы не изменять кодировку символов, отличных от ascii? - PullRequest
7 голосов
/ 22 февраля 2020

Я также опубликовал свою проблему как Github Issue на официальном репо.

Я использую PreMailer. Net для встраивания CSS в HTML документы. Тем не менее, когда я вызываю MoveCssInline, он кодирует не-ASCII символы, такие как '&'. Например:

<a href="http://www.website.com/page?param1=a&param2=b"></a>

Изменено на:

<a href="http://www.website.com/page?param1=a&amp;param2=b"></a>

Я думал, что это поведение будет ограничено URL-адресами и значениями href, но оказывается, что оно также кодирует innerHTML / content. Например:

Кроме того, я провел дополнительное тестирование и обнаружил, что эта кодировка не просто выполняется для таких атрибутов, как href. Фактически, он также будет кодировать значения text / Inner HTML, которые абсолютно действительны html без кодирования. Пример:

<p>&</p>

Это допустимо HTML и не должно кодироваться, но PreMailer. Net изменит это на:

<p>&amp;</p>

У кого-нибудь есть исправление или обходной путь за это? У меня нет контроля над документами HTML, и я не могу изменять URL-адреса или содержимое, кроме встраивания CSS.

Ответы [ 2 ]

2 голосов
/ 15 марта 2020

В зависимости от ваших индивидуальных потребностей, попробуйте следующее:

        Symbols.Ampersand: temp.Append("&amp;")
        Symbols.NoBreakSpace: temp.Append("&nbsp;")
        Symbols.GreaterThan: temp.Append("&gt;")
        Symbols.LessThan: temp.Append("&lt;")

Обновление:

Эти строки взяты из строк 132-139 PreMailer. Net зависимость называется AngleSharp , которая является HTML синтаксическим анализатором.

В настоящее время, насколько я могу судить, кодировка является обязательной для AngleSharp, и, следовательно, ее нельзя избежать с любой настройкой в ​​AngleSharp или PreMailer. Net.

В соответствии со следующим закрытым выпуском , это сделано в соответствии с HTML spe c. Тем не менее, я считаю, что все еще есть ошибка, поскольку она должна кодировать только значения атрибутов, а не внутреннее содержимое HTML. Кроме того, я не думаю, что это приемлемое поведение для CSS вкладыша, который не должен проверять или дезинфицировать HTML. Кроме того, я даже не думаю, что анализатор должен вносить изменения, которые не запрашиваются клиентом.

0 голосов
/ 25 февраля 2020

Эта проблема обсуждалась более здесь и исправлена ​​ здесь .

Вы должны использовать эти опции, как указано в этом файле.

:input_encoding => 'ASCII-8BIT',
:output_encoding => nil,
...