Как использовать [% специальных символов в Nokogiri - PullRequest
3 голосов
/ 29 октября 2019

Я использую Nokogiri в Rails для анализа моего HTML и преобразования самозакрывающихся тегов в обычные. Это прекрасно работает, но также преобразует теги наших шаблонов [% и %], например:

html = "<a href='[% hello %]'>Hello from [% Us %]</a>"
Nokogiri::HTML::DocumentFragment.parse(html).to_html

преобразует в:

<a href='%5B%%20hello%20%%5D'>Hello from [% Us %]</a>

Как мнеизбежать этого без использования gsub после преобразования?

Это не помогло:

html = "<a href='[% hello %]'>Hello from [% Us %]</a>"
doc = Nokogiri::HTML::Document.new
doc.encoding = 'UTF-8'
doc.fragment(html).to_html
#=> "<a href=\"%5B%%20hello%20%%5D\">Hello from [% Us %]</a>" 

1 Ответ

1 голос
/ 29 октября 2019

@ anothermh фактически ответил на мой вопрос (см. Комментарии ниже моего вопроса). В итоге я воспользовался его предложением (to_xml)

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

Мое решение состояло в том, чтобы использовать формат XHTML, описанный здесь: https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Node/SaveOptions#FORMAT-constant

html = "... my html ..."    
doc = Nokogiri::HTML::Document.new
doc.encoding = 'UTF-8'
final = doc.parse(html).to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::DEFAULT_XHTML)
...