4

使用 Rails 3 我正在使用在 drupal 或其他东西中生成的 XML 提要。它给我的标签看起来像:

<body><![CDATA[&#60;p&#62;This is a title&#60;br /&#62;A subheading&#60;/p&#62;]]></body>

所以意图是这应该看起来像:

<p>This is a title<br />A subheading</p>

然后可以使用<%= @mystring.html_safe %>or<%= raw @mystring %>或其他东西在视图中呈现。问题在于以这种方式呈现字符串只会将子字符串&#60;转换为<字符。我需要一种双重原始或双重未编码来首先处理 chr,然后将标签呈现为 html 安全。

任何人都知道这样的事情:

<%= @my_double_safed_string.html_safe.html_safe %>
4

1 回答 1

6

我不认为这是有效的 XML - 他们通过使用实体cdata 以两种不同的方式对文本进行了两次转义。不过,您可以使用 nokogiri 解析它,例如:

require 'nokogiri'

xml = Nokogiri::XML.parse "<body><![CDATA[&#60;p&#62;This is a title&#60;br /&#62;A subheading&#60;/p&#62;]]></body>"
text = Nokogiri::XML.parse("<e>#{xml.text}</e>").text
#=> text = "<p>This is a title<br />A subheading</p>"

看到这个 drupal 站点正在喷出疯狂的双重转义 xml,我什至倾向于使用正则表达式。解决问题的黑客创建的黑客?身份证。不管:

xml.text
#=> "&#60;p&#62;This is a title&#60;br /&#62;A subheading&#60;/p&#62;"
xml.text.gsub(/\&\#([0-9]+);/) { |i| $1.to_i.chr }
#=> "<p>This is a title<br />A subheading</p>"

希望这可以帮助!

于 2012-05-09T22:52:01.110 回答