2014-12-03 4 views
2

У меня есть этот код:Как избежать кодирования содержимого Nokogiri href?

n = Nokogiri::HTML::DocumentFragment.parse("<a href='{{var_name}}'>click</a>") 

и когда я n.to_html, я получаю {{ }} спасся:

"<a href=\"%7B%7Bvar_name%7D%7D\">click</a>" 

Я хочу, чтобы избежать этого, потому что мне нужно, чтобы разобрать его с шаблоном двигателя.

Как я могу сообщить Nokogiri, чтобы не кодировать контент «href»?

ответ

5

Я не думаю, что можно указать Nokogiri на , а не кодировать значения текста внутри параметров в HTML. Это парсер следующие правила, но это не значит, что мы должны принять его вывод:

require 'nokogiri' 

REGEX_HASH = { 
    '%7B' => '{', 
    '%7D' => '}' 
} 

REGEX = /(?:#{ Regexp.union(REGEX_HASH.keys).source })/ 
# => /(?:%7B|%7D)/ 

doc = Nokogiri::HTML::DocumentFragment.parse("<a href='{{var_name}}'>click</a>") 
doc.to_html 
# => "<a href=\"%7B%7Bvar_name%7D%7D\">click</a>" 

fixed_html = doc.to_html.gsub(REGEX, REGEX_HASH) 
# => "<a href=\"{{var_name}}\">click</a>" 

Но, если XHTML или XML выход приемлем, вы можете упростить вещи значительно:

doc = Nokogiri::HTML::DocumentFragment.parse("<a href='{{var_name}}'>click</a>") 
doc.to_html # => "<a href=\"%7B%7Bvar_name%7D%7D\">click</a>" 
doc.to_xhtml # => "<a href=\"{{var_name}}\">click</a>" 
doc.to_xml # => "<a href=\"{{var_name}}\">click</a>" 
Смежные вопросы