Nokogiri未转义的html



我正在使用nokogiri解析HTML文本并对该HTML进行一些更改。

doc = Nokogiri::HTML.parse(html_code)

但我使用的是小胡子的html,所以html中包含的小胡子变量在里面大括号,例如{{mustache_variable}}。

修改完nokogiri文档后,当我做

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或更好的解决方案??

可能你需要cgi模块

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

或者你可以使用htmlentities lib。

并尝试使用doc。内容代替doc.to_html

我遇到了同样的问题,最后使用正则表达式来转换转义的双括号:

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

为了更安全,我建议在每个mustache变量前加上一个命名空间,以防某些HTML故意使用转义的双括号模式,例如

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

相关内容

  • 没有找到相关文章

最新更新