ruby - 如何避免 Nokogiri 编码 href 内容?

标签 ruby nokogiri

我有这个代码:

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”内容进行编码?

最佳答案

我认为不可能告诉 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>"

关于ruby - 如何避免 Nokogiri 编码 href 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283948/

相关文章:

ruby - 如何添加商标符号

ruby - 理解可比较的mixin和可枚举的mixin

ruby-on-rails - 等待 The Rails 3 Way 或任何其他类似的书?

ruby - ruby 中的最后一个索引是否有等效的 Array#find_index ?

ruby - 如何让 rake 测试不使用默认的 minitest?

ruby - 使用周围元素引用数据

ruby - 我可以创建长度为 8 的 md5 哈希吗?

ruby - Nokogiri 返回 XML 标签和数据

ruby - 无法从元素访问 href

ruby - Nokogiri Ruby - 从输出 html 中删除 &lt;!DOCTYPE ... >