3

我想使用 Nokogiri 中的 XML Builder 向 HTML 添加项目符号“•”之类的内容,但所有内容都被转义了。如何防止它被逃脱?

我希望结果是:

<span>&#8226;</span> 

而不是:

<span>&amp;#8226;</span> 

我只是这样做:

xml.span { 
  xml.text "&#8226;\ " 
}

我错过了什么?

4

2 回答 2

3

如果你定义

  class Nokogiri::XML::Builder
    def entity(code)
      doc = Nokogiri::XML("<?xml version='1.0'?><root>&##{code};</root>")
      insert(doc.root.children.first)
    end
  end

那么这个

  builder = Nokogiri::XML::Builder.new do |xml|
    xml.span {
      xml.text "I can has "
      xml.entity 8665
      xml.text " entity?"
    }
  end
  puts builder.to_xml

产量

<?xml version="1.0"?>
<span>I can has &#x2022; entity?</span>

 

PS这只是一个解决方法,对于一个干净的解决方案,请参阅libxml2文档(Nokogiri 是基于 libxml2 构建的)以获得更多帮助。然而,即使是这些人也承认,处理实体有时会非常..err,很麻烦

于 2009-11-28T19:06:09.863 回答
0

当您设置元素的文本时,您实际上是在设置文本,而不是 HTML 源代码。<并且&在纯文本中没有任何特殊含义。

所以只需输入一个项目符号:'•'. 当然,您的源代码和 XML 文件必须使用相同的编码才能正确显示。如果您的 XML 文件是 UTF-8 但您的源代码不是,您可能不得不'\xe2\x80\xa2'将项目符号字符的 UTF-8 字节序列作为字符串文字说明。

(一般来说,Ruby 1.8 中的非 ASCII 字符很棘手。基于字节的接口与 XML 的 all-text-is-Unicode 世界不太吻合。)

于 2009-11-28T12:52:07.510 回答