2017-02-22 6 views
0

Я использую методы Jsoup's parseBodyFragment() и parse() для работы с блоками кода, состоящими из скриптов, нот и тегов стиля. Цель состоит в том, чтобы не очищать их - только до select(), анализировать и выводить их. Часть select() работает очень хорошо.Как остановить Jsoup от параметров URL-адреса кодировки?

Однако проблема заключается в том, что он автоматически кодирует параметры url атрибутов src. Таким образом, когда входной сигнал заключается в следующем:

<noscript> 
<img height="1" width="1" style="display:none;" alt="" src="https://something.orother.com/i/cnt?txn_id=123&p_id=123"/> 
</noscript> 

я в конечном итоге с этим, вернулся из Jsoup, через outerHTML() метода:

<noscript> 
<img height="1" width="1" style="display:none;" alt="" src="https://something.orother.com/i/cnt?txn_id=123&amp;p_id=123"/> 
</noscript> 

Проблема является стандартом амперсанд (&) в параметре URL-адрес кодируется и выводится как &amp;. Есть ли способ отключить это?

Я ищу способ получить html выбранного элемента без изменений. Благодаря!

Обновление (23.02.2016): Уточненная проблема. Также была найдена проблема в репозитории Github, описывающая проблему: https://github.com/jhy/jsoup/issues/372. Похоже, это может быть невозможно.

+0

вы можете получить pagedocument, используя синтаксический анализ, а затем получить контент, используя select. – thanga

+0

@thanga thanks - Я должен был быть более ясным; Я могу получить его с помощью select - проблема возникает после его получения. Кажется, Jsoup изменяет html без возможности получить исходный код. Я нашел проблему в репозитории Github, описывая ее, поэтому я думаю, что это может быть невозможно. Я обновлю вопрос, чтобы включить ссылку на эту проблему. –

ответ

0

Оригинальный HTML недопустим. &, который не запускает ссылку на символ, должен быть выражен как &amp; в значении атрибута HTML.

Анализаторы HTML, как ожидается, будут выполнять восстановление ошибок и создать действительный DOM.

Jsoup работает, анализируя HTML в DOM, позволяя запускать на нем запросы, а затем экспортировать DOM обратно в HTML.

Вы не можете избежать нормализации пробелов, восстановления ошибок или любых других действий, которые делают парсеры. Подход, используемый Jsoup для извлечения данных, не предназначен для поддержки сохранения ошибок.

+0

спасибо, но я понимаю, что HTML5 смягчил это ограничение. См. Http://stackoverflow.com/a/19442133/5361034, в котором также приводится спецификация: https://www.w3.org/TR/html5/syntax.html#tokenizing-character-references - –

Смежные вопросы