2011-01-25 80 views
0

我正在使用Ruby on Rails,在我的應用程序中有一個帶有tinyMCE的文本區域,因此用戶可以向文本添加樣式,甚至上傳圖像和視頻。如何顯示沒有css的文本

當這些顯示在主頁上的列表中時,我不希望顯示帖子的樣式,也不希望顯示視頻/圖像。

例如,假設我寫:

你怎麼樣?(一些圖像/視頻點擊這裏)

然後,我想在列表中顯示簡單如下:

你怎麼樣? (未顯示圖像/視頻)

+0

谷歌是你的朋友:http://stackoverflow.com/questions/2576394/remove-all-html-tags-from-attributes-in-rails – apneadiving 2011-01-25 13:37:56

回答

3

你有幾個選項可以使用。當您必須渲染屏幕報廢的網頁內容時,剝離,清理HTML也非常有用。您的情況可能會更簡單,因爲您不會「預料到」從網頁抓取收集到的意外內容。

您可以使用strip_tags這消除字符串中的標籤:

strip_tags("Strip <i>these</i> tags!") 
# => Strip these tags! 
strip_tags("<b>Bold</b> no more! <a href='more.html'>See more here</a>...") 
# => Bold no more! See more here... 
strip_tags("<div id='top-bar'>Welcome to my website!</div>") 
# => Welcome to my website! 

sanitize方法應該逃避一些並刪除其他標記。要了解更多關於鐵軌消毒的信息,請參閱here

如果您需要更多控制檢查sanitizeloofah。我更喜歡絲瓜,但消毒可能會更符合你的口味。絲瓜是建立在nokogiri上,你可以定義細粒度的規則,你想如何按摩HTML或HTML片段。除了白名單,剝離你也可以做標籤的擦洗:

span2div = Loofah::Scrubber.new do |node| 
    node.name = "div" if node.name == "span" 
end 

..其中跨越divs。

+0

謝謝!這是我想要的。 – 2011-01-25 15:41:22

2

strip_tags幫助程序將從字符串中刪除HTML標記。

html = "<em>Hello!</em> <img src='/logo.png' />" 
strip_html(html) # => 'Hello! ' 

但是!雖然我們的主題是允許用戶輸入自己的HTML,但請確保您完全瞭解後果。您絕對需要正在使用HTML白名單過濾器來阻止XSS攻擊。事實上,我不確定,如果你允許Flash嵌入,輸入可能被消毒,因爲Flash文件被允許隨意運行任意的Javascript。

請確保您在繼續操作之前完全瞭解所涉及的問題。上傳任意HTML的能力只能授予你個人知道的一小羣非常可信的用戶。

1

這總是很難完全覆蓋。

根據你的規範,我明白你想要刪除具有樣式的HTML標籤。

以下示例可能對您有所幫助。

控制器/ PostsController.rb

def index 
    @posts = Post.find.all 
end 

助手/ PostsHelper.rb

def strip_html(content) 
    content.gsub(/<\/?[^>]*>/,"") 
end 

查看/職位/ index.html.erb

<ul> 
<% @posts.each do |post| %> 
    <li> 
    <h1><a href="<%= post_path(post)%>"><%= post.title %></a></h1> 
    <p><%= strip_html(post.body) %></p> 
    </li> 
<% end %> 
</ul>