我想在Nokogiri中使用XML Builder添加項目符號「•」到HTML,但所有內容都會被轉義。我如何防止它被轉義?如何使用Nokogiri :: XML :: Builder添加非轉義符號到HTML
我想結果是:
<span>•</span>
而不是:
<span>&#8226;</span>
我只是在做這樣的:
xml.span {
xml.text "•\ "
}
我缺少什麼?
我想在Nokogiri中使用XML Builder添加項目符號「•」到HTML,但所有內容都會被轉義。我如何防止它被轉義?如何使用Nokogiri :: XML :: Builder添加非轉義符號到HTML
我想結果是:
<span>•</span>
而不是:
<span>&#8226;</span>
我只是在做這樣的:
xml.span {
xml.text "•\ "
}
我缺少什麼?
如果定義
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 • entity?</span>
PS這只是一種變通方法,一個乾淨的解決方案,請參閱libxml2
文件(引入nokogiri是建立在libxml2的),以獲得更多幫助。但是,即使這些人admit that handling entities can be quite ..err, cumbersome sometimes。
當您設置元素的文本時,您確實在設置文本,而不是HTML源文件。 <
和&
在純文本中沒有任何特殊含義。
所以只需鍵入一個項目符號:'•'
。當然,你的源代碼和你的XML文件必須使用相同的編碼才能正確輸出。如果你的XML文件是UTF-8,但你的源代碼不是,你可能不得不說'\xe2\x80\xa2'
這是UTF-8字符序列作爲字符串字符串。
(在Ruby 1.8中一般非ASCII字符是棘手。基於字節接口不與XML世界網太清楚了所有的文本是Unicode的。)
我需要結果爲「•」,所以'\ xe2 \ x80 \ xa2'不起作用:/ – 2009-11-29 01:54:26
爲什麼你需要*那個特殊的逃脫版本?如果你編碼有問題,所以不會像你輸入那樣出現,那麼你應該嘗試通過設置你的編碼來解決這些問題,而不是訴諸於HTML轉義。 (在其他環境中,您可能會要求您的HTML序列化程序將所有非ASCII字符都轉義爲HTML-&符號序列以解決此問題,但Ruby目前沒有該級別的Unicode支持。) – bobince 2009-11-29 02:12:46
感謝adrian,什麼是「實體「,你從哪裏得到8665? – 2009-11-29 01:46:16
如果我做的是8226而不是8665,它會解析爲「bull」。 :/ – 2009-11-29 01:51:51
哎呀,我誤以爲8665爲8226! 實體是「&thing;」序列的正確名稱。 '•'應該沒關係,它是HTML中該實體的正式名稱。 '<!ENTITY bull CDATA「•」 - bullet,= black small circle,u + 2022 ISOpub - >'see http://www.w3.org/TR/WD-html40-970708/sgml/entities。 HTML – akuhn 2009-11-29 09:37:27