2012-05-20 121 views
11

我已經繼承了以下字符串(我也沒有辦法左右格式):轉義HTML字符串

<iframe \n class=\"some_class\"\n type=\"text/html\" \n src=\"/embed/iframe_content.html?id=tsqA5D7_z10\" \n width=\"960\" \n height=\"593\" \n marginwidth=\"0\" \n marginheight=\"0\" \n frameborder=\"0\">\n</iframe> 

我使其在ERB模板是這樣的:

<%= the_string %> 

在它像這樣的文本呈現:

&lt;iframe class="some_class" type="text/html" src="/embed/iframe_content.html?id=tsqA5D7_z10" width="960" height="593" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt; 

我需要將其呈現爲HTML。

我曾嘗試以下:

  1. <%= the_string.html_safe %>#呈現字符串不變
  2. <%= CGI.unescapeHTML(the_string) %>#有一個類型錯誤與類型錯誤' '不能DUP NilClass'
  3. <%= CGI.unescapeHTML(the_string).html_safe %>#錯誤錯誤can not dup NilClass'
  4. <%= raw the_string %>#呈現字符串不變

如何將此字符串呈現爲HTML?

回答

17

你似乎已經注意到了,有兩件事情需要打理:

  1. 在您的視圖進行反向轉義的HTML實體
  2. 打印原始的HTML

對於2號<%= raw ... %>應該可以正常工作。

對於1號CGI.unescapeHTML是正確的想法,但我不認爲它承認所有的HTML實體,所以我會建議採取一看HTML Entites gem

您也可以嘗試使用simple_format的輔助方法,但我認爲你將不得不通過它一些選項,以允許標籤

我也強烈建議將您的unescaping邏輯轉換爲輔助方法。

+0

感謝您的這些建議。我會看看。 – Undistraction

+0

再次感謝。 HTML Entites寶石是答案。 – Undistraction

1

你可以試試這個:

<%= raw the_string %> 
+0

感謝您的建議,但對字符串沒有影響。 – Undistraction

1

第3版的聲音是有價值的。任何你不使用the_string的原因?

<%= raw CGI.unescapeHTML(the_string) %>

+0

正如我在我的問題中提到它失敗,錯誤類型錯誤'不能dup NilClass' – Undistraction

+0

在你的問題是不同的。還是一樣的錯誤? – iltempo

+0

對不起。你是對的。但不是。相同的結果:類型錯誤'不能重複NilClass' – Undistraction

4

最後我不得不使用Matthew建議的HTMLEntities Gem;

  1. 安裝了RVM寶石,並將其添加到我的Gemfile

  2. 在我的應用程序所需的IT。rb

  3. 以下是我能夠正確渲染的唯一方法。請注意圍繞the_string的多餘單引號。沒有它們,尖括號不會呈現,但其他所有內容都會呈現。

    coder = HTMLEntities.new 
    raw coder.decode("'"+the_string+"'") 
    
7

你所進行反向轉義,爲什麼你是一個類型錯誤收到錯誤信息不能是一個字符串和多數民衆can't dup NilClass

嘗試做
s = String.new your_obj.to_s

現在做

CGI.unescapeHTML(s)

+0

在控制器中工作?這是正確的答案,但您必須更改to_s - > to_str。 – jqr