我正在使用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}}')