我想在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