Как запретить Нокогири кодировать сущности во фрагменты HTML - PullRequest
3 голосов
/ 29 февраля 2012

Нокогири 1.5.0

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

f = Nokogiri::HTML.fragment(%q{<a href="http://example.com?this=1&that=2">Testing</a>})
f.to_s    # => "<a href=\"http://example.com?this=1&amp;that=2\">Testing</a>"
f.to_html # => "<a href=\"http://example.com?this=1&amp;that=2\">Testing</a>"

Не помогает при использовании to_html(encoding: 'UTF-8') или US-ASCII.

Это может показаться довольно распространенным, анализируя допустимый формат ссылки и желая отобразить его как действительный HTML.

Как сделать так, чтобы Nokogiri прозрачно возвращал незашифрованные Html-сущности нетронутыми? не помог.

1 Ответ

4 голосов
/ 01 марта 2012

Парсер HTML Nokogiri автоматически исправляет ошибки в исходном документе. Голый амперсанд в URL-адресе на самом деле является ошибкой , поэтому Нокогири исправляет его. Если вы посмотрите на f.errors, то увидите, что &that не является допустимой сущностью и отсутствует точка с запятой, поэтому он устанавливает амперсанд на &amp;, что делает его действительным HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...