Nokogiri, неисследованный html - PullRequest
1 голос
/ 27 июля 2011

Я анализирую текст HTML, используя nokogiri, и делаю некоторые изменения в этом HTML.

doc = Nokogiri::HTML.parse(html_code)

Но я использую усы с этим HTML, поэтому HTML содержит переменные усов, которые заключены в фигурные скобки, например {{mustache_variable}}.

После работы с документом нокогири, когда я делаю

doc.to_html

Эти фигурные скобки сбежали, и я получил что-то вроде %7B%7Bmustache_variable%7D%7D


Но не весь контент экранирован, например если у меня есть HTML как

<label> {{mustache_variable}} </label>

Возвращается, <label> {{mustache_variable}} </label>


Но для HTML, как, <img src='{{mustache_variable}}'>

Возвращается, <img src='%7B%7Bmustache_variable%7D%7D'>

Итак, в настоящее время я делаю gsub для замены% 7B и% 7D на {и} соответственно, чтобы усы работали.

Итак, есть ли способ, которым я могу получить точный html от nokogiri или лучшее решение ???

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Возможно, вам нужен модуль cgi

require 'cgi'
doc = Nokogiri::HTML.parse(html_code)
CGI.unescapeHTML(doc.to_html)

или вы можете использовать htmlentities lib .

И попробуйте использовать doc.content вместо doc.to_html

0 голосов
/ 06 сентября 2011

Я столкнулся с этой же проблемой и использовал регулярное выражение для преобразования экранированных двойных скобок:

html_doc.gsub(/%7B%7B(.+?)%7D%7D/, '{{\1}}')

Чтобы сделать это более безопасным, я бы рекомендовал ставить перед каждой переменной усами пространство имен, на случай, если в некоторых HTML-кодах преднамеренно используется экранированная двойная скобка, например,

html_doc.gsub(/%7B%7Bnamespace(.+?)%7D%7D/, '{{namespace\1}}')
...