【问题标题】:Nokogiri prevent converting entitiesNokogiri 阻止转换实体
【发布时间】:2011-09-14 14:45:51
【问题描述】:
def wrap(content)
  require "Nokogiri"
  doc = Nokogiri::HTML.fragment("<div>"+content+"</div>")
  chunks = doc.at("div").traverse do |p|
    if p.is_a?(Nokogiri::XML::Text)
      input = p.content
      p.content = input.scan(/.{1,5}/).join("&shy;")
    end
  end
  doc.at("div").inner_html
end

wrap("aaaaaaaaaa")

给我

"aaaaa&amp;shy;aaaaa"

而不是

"aaaaa&shy;aaaaa"

如何得到第二个结果?

【问题讨论】:

  • 如果你使用&amp;#xAD;而不是&amp;shy;会发生什么?
  • 同样的结果,&被编码为&我得到 &#xAD;

标签: html ruby nokogiri


【解决方案1】:

返回

doc.at("div").text

而不是

doc.at("div").inner_html

然而,这会从结果中删除所有 HTML。如果您需要保留其他标记,您可以使用 CGI.unescapeHTML:

CGI.unescapeHTML(doc.at("div").inner_html)

【讨论】:

  • 在这种情况下,您可能可以使用 CGI.unescapeHTML。更新答案
  • 是的,你失去了所有应该存在的文本实体(如果有的话)我正在寻找一个透明的解决方案。
  • 好的,我想我明白了你想要做什么。我相信问题在于'­'被添加为编码文本,而不是 HTML 实体。尝试使用p.content = Nokogiri::HTML.fragment(input.scan(/.{1,5}/).join("&amp;shy;")) 将字符串解析为 HTML 片段。如果它有效,我将更新我的答案/创建另一个。如果没有,我就没主意了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2012-06-08
  • 2014-11-17
  • 1970-01-01
相关资源
最近更新 更多