使用Rails 3我正在使用drupal或其他东西生成的XML feed。它给我的标签看起来像:
<body><![CDATA[<p>This is a title<br />A subheading</p>]]></body>
所以意图是这应该看起来像:
<p>This is a title<br />A subheading</p>
然后可以使用<%= @mystring.html_safe %>
或<%= raw @mystring %>
或其他内容在视图中呈现。问题是以这种方式呈现字符串只会将<
之类的子字符串转换为<
字符。我需要一种双重原始或双重编码来首先处理chr和然后将标记呈现为html安全。
任何人都知道如下:
<%= @my_double_safed_string.html_safe.html_safe %>
答案 0 :(得分:5)
我不认为这是有效的XML - 它们通过使用实体和 cdata以两种不同的方式将文本两次转义。不过,您可以使用nokogiri解析它,例如:
require 'nokogiri'
xml = Nokogiri::XML.parse "<body><![CDATA[<p>This is a title<br />A subheading</p>]]></body>"
text = Nokogiri::XML.parse("<e>#{xml.text}</e>").text
#=> text = "<p>This is a title<br />A subheading</p>"
看到这个drupal网站正在喷出疯狂的双重逃脱xml,我甚至倾向于使用正则表达式。黑客解决黑客创建的问题? IDK。无论:
xml.text
#=> "<p>This is a title<br />A subheading</p>"
xml.text.gsub(/\&\#([0-9]+);/) { |i| $1.to_i.chr }
#=> "<p>This is a title<br />A subheading</p>"
希望这有帮助!