我正在使用Ruby on Rails,在我的应用程序中有一个带有tinyMCE的文本区域,因此用户可以为文本添加样式,甚至上传图像和视频。
当这些显示在主页的列表中时,我不希望显示帖子的样式,也不希望显示视频/图像。
例如,假设我写道:
你好吗? (这里有一些图片/视频)
然后,我想简单地在列表中显示以下内容:
你好吗? (没有显示图像/视频)
答案 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。
如果您需要更多控件,请查看sanitize或loofah。我更喜欢丝瓜,但消毒可能更符合你的口味。 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>