【问题标题】:How to avoid Nokogiri encoding href content?如何避免 Nokogiri 编码 href 内容?
【发布时间】:2014-12-06 02:30:58
【问题描述】:

我有这个代码:

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

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      相关资源
      最近更新 更多