如何在没有css的情况下显示文本

时间:2011-01-25 13:33:41

标签: ruby-on-rails

我正在使用Ruby on Rails,在我的应用程序中有一个带有tinyMCE的文本区域,因此用户可以为文本添加样式,甚至上传图像和视频。

当这些显示在主页的列表中时,我不希望显示帖子的样式,也不希望显示视频/图像。

例如,假设我写道:

  

你好吗? (这里有一些图片/视频)

然后,我想简单地在列表中显示以下内容:

  你好吗? (没有显示图像/视频)

3 个答案:

答案 0 :(得分:3)

您可以使用多种选项。当您必须渲染屏幕报废的Web内容时,剥离,清理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。我更喜欢丝瓜,但消毒可能更符合你的口味。 Loofah是建立在nokogiri之上的,你可以定义细粒度的规则,如何按摩HTML或HTML片段。除了白名单,剥离你也可以擦洗标签:

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

..将更改跨越到div。

答案 1 :(得分:2)

strip_tags帮助器将从字符串中删除HTML标记。

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

然而!虽然我们的主题是允许用户输入自己的HTML,但请确保您完全了解后果。您绝对必须使用HTML白名单过滤器来阻止XSS攻击。事实上,我不确定,如果你允许Flash嵌入,输入可能会被清理,因为Flash文件可以随意运行任意Javascript。

在继续操作之前,请确保您完全了解所涉及的问题。上传任意HTML的能力应该只授予您个人认识的一小群极其信任的用户。

答案 2 :(得分: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>