gen*_*abs 3 ruby ruby-on-rails html-entities html-safe
使用Rails 3我正在使用drupal或其他东西生成的XML feed.它给我的标签看起来像:
<body><![CDATA[<p>This is a title<br />A subheading</p>]]></body>
Run Code Online (Sandbox Code Playgroud)
所以意图是这应该看起来像:
<p>This is a title<br />A subheading</p>
Run Code Online (Sandbox Code Playgroud)
这可能会在随后使用视图渲染<%= @mystring.html_safe %>或<%= raw @mystring %>什么的.麻烦的是以这种方式呈现字符串只会将子字符串<转换为<字符.我需要一种双重原始或双重编码来首先处理chr,然后将标签渲染为html安全.
任何人都知道如下:
<%= @my_double_safed_string.html_safe.html_safe %>
Run Code Online (Sandbox Code Playgroud)
我不认为这是有效的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>"
Run Code Online (Sandbox Code Playgroud)
看到这个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>"
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |