rails table html,Ruby on Rails:如何将字符串呈现为HTML?
我有
@str ="Hi"
在我的erb視圖中:
當我真正想要的是Hi時,頁面上將顯示:Hi。 將字符串"解釋"為HTML標記的紅寶石方法是什么?
編輯:這種情況
@str ="hello"
如果我認為
HTML源代碼是>,其中我真正想要的是hello(不帶轉義雙引號的反斜杠)。"取消轉義"雙引號的最佳方法是什么?
您可能還考慮使用%Q []語法進行字符串轉義。 例如%Q["quotation marks"] =>""quotation marks""來源:en.wikibooks.org/wiki/Ruby_Programming/Syntax/不知道是否有幫助。
更新
出于安全原因,建議使用sanitize代替html_safe。鏈接
發生的事情是,作為一種安全措施,Rails正在為您轉義您的字符串,因為其中可能嵌入了惡意代碼。但是,如果您告訴Rails您的字符串是html_safe,它將直接通過它。
@str ="Hi".html_safe
要么
@str ="Hi"
使用raw可以很好地工作,但是要做的就是將字符串轉換為字符串,然后調用html_safe。當我知道我有一個字符串時,我更喜歡直接調用html_safe,因為它跳過了不必要的步驟,使事情更清晰。有關字符串轉義和XSS保護的詳細信息,請參閱此Asciicast。
太棒了搜索一個小時后,我仍然找不到該怎么做。感謝您的回答。
我一直使用raw。很高興知道這一點!
向未來致敬=)
根據stackoverflow.com/questions/44575106/刪除了sanitize
使用原始:
但是,正如@ jmort253正確說的那樣,請考慮HTML真正所屬的位置。
嗨,此解決方案有效,除了一個警告:請參閱編輯后的問題
如果您使用的是使用Erubis的rails,最酷的方法是
請注意雙等號。有關更多信息,請參見SO的相關問題。
您還可以使用simple_format(@str)刪除惡意代碼。在此處信息:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
您正在將業務邏輯與內容混合在一起。相反,我建議將數據發送到您的頁面,然后使用JQuery之類的東西將數據放置在需要的地方。
這具有將所有HTML保留在其所屬的HTML頁面中的優勢,因此您的Web設計人員可以稍后修改HTML,而無需倒入服務器端代碼。
或者,如果您不想使用JavaScript,則可以嘗試以下操作:
@str ="Hi"
至少以這種方式,您的HTML位于它所屬的HTML頁面中。
問題是,我的應用程序正在接收標記不良的文件,然后通過正則表達式將其"轉換"為良好的HTML標記以發送到視圖。因此,正在生成的HTML標記是動態的,因此我無法知道先驗哪些標記應該包圍@str。如果不在模型中,我將在哪里執行"翻譯"工作?我認為我們不應在視圖中包含大量的邏輯代碼。
這確實是一個見解的問題。在開發新的應用程序時,我希望盡可能保持所有內容的清潔。但是,有時我們必須在別人給我們留下的束縛之內工作。如果您的數據源返回HTML標記,則可以按照Michael Stums解決方案中的描述使用"原始"格式。
如果您繼承了某些代碼的支持,并且代碼中的區域顯示出不良的思維或設計,那么清理它以使其更易于維護確實是您職責的一部分。當您開始編寫出色的代碼時,將其保留為您的感覺很好,但是在需要工作時,將其保留為比您發現的更好。我的工作之一是管理一些舊版應用程序;我熱衷于不修復未損壞的東西,但由于其編寫方式而無法輕松進行增強。我不得不重寫大多數函數調用,但是現在使用它要容易得多。
如果沒有其他理由使用JS,則不應將JavaScript用于HTML插值。對于非JS瀏覽器,這會破壞您的網站(是的,有一些)。
html也屬于助手,有時也禁止在數據庫中使用。雖然我寧愿存儲markdown,然后渲染為html。
@Macario-嗨,我不確定我是否完全理解您的評論。你介意嗎?謝謝!
好吧,有時候html是在模板的外部生成的,它需要一個輔助函數,不需要逃脫,或者有時候-盡管我認為這是一種不好的做法,而且不是很漂亮-它是由用戶由WYSIWG編輯器生成并存儲在數據庫中的作為html,并且也不需要逃脫,當然,它需要進行清理,否則可能會發生不好的事情。我更喜歡使用模板語言Markdown來讓用戶輸入樣式化的內容。在這種情況下,您不希望您的內容被轉義是這種方式。
當然,如果您允許非轉義的內容,那么確保非邪惡的標記取決于您。
或者,您可以嘗試CGI.unescapeHTML方法。
CGI.unescapeHTML"
This is a Paragraph.
=>"
This is a Paragraph.
html_safe版本在Rails 4中運作良好...
Administrators only ".html_safe if current_user.admin? %
>
@str ="hello"
If in my view I do
The HTML source code is hello where what I really want is hello (without the backslashes that were escaping the double >quotes). What's the best way to"unescape" those double quotes?
解決方案:在單引號內使用雙引號(或在雙引號內使用單引號),以避免使用反斜杠轉義。
@str = 'hello'
由于您正在翻譯,并且從一個人的s腳的編碼文件中選擇了想要的代碼,您是否可以將content_tag與正則表達式結合使用?
您可以從api文檔中竊取此翻譯后的代碼,插入到content_tag中,例如:
"#{translated_class}" do -%>
# => Hello world!
不知道您的代碼,這種想法將確保您翻譯的代碼過于合規。
我假設已翻譯的文本是div中的實際內容,對嗎?即,在示例中,它是" Hello world!"?如果translation_text中包含更多HTML,即嵌套的div或spans,該怎么辦?那時我需要多次調用content_tag嗎?
和...抱歉,請早點輸入...里面的每個嵌套div / span仍然是content_tag,盡管如此,您仍然需要對其進行驗證?由于我們看不到您在用花哨的翻譯;-)做些什么,因此Id假設您正在尋找所有標簽,無論regex是否位于html的父級上……
。您不會把所有lis當作大屁股繩打印嗎?每個人都有自己的content_tag:li,文字正確嗎?
總結
以上是生活随笔為你收集整理的rails table html,Ruby on Rails:如何将字符串呈现为HTML?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.lang.OutOfMemor
- 下一篇: 计算机基础知识整理 世上最全,IT小白必