Textitilize方法在浏览器上显示<p>标签</p>

时间:2014-04-18 20:59:19

标签: ruby-on-rails ruby redcloth

使用此代码
     <dd><%= textilize @box.description %></dd> 浏览器显示      <p>description text</p> 我如何隐藏

标签??

1 个答案:

答案 0 :(得分:0)

这取决于您的要求。如果您不希望一般使用块级标记,则可以使用lite模式:

来自文档:http://redcloth.rubyforge.org/classes/RedCloth/TextileDoc.html

r = RedCloth.new( "And then? She *fell*!", [:lite_mode] )
r.to_html
#=> "And then? She <strong>fell</strong>!"

否则,我已经为markdown做了一些事情,我允许一组非常有限的标签,如果原始文本中有换行符,则只允许使用块元素:

def markdown_to_html(markdown_text)
  allowed_tags = %w(a em strong)
  # Only allow block elements if there are line breaks within the text.  This avoids
  # unnecessary <p> elements wrapping short single-line texts.
  allowed_tags += %w(ul ol li p) if markdown_text.strip.index("\n")

  ActionController::Base.helpers.sanitize(Kramdown::Document.new(markdown_text).to_html, :tags => allowed_tags)
end

调整以适应!

另请参阅这个旧线程https://www.ruby-forum.com/topic/175551,它提到了Rails pre-3中的一个方法textilize_without_paragraph(),该方法移动到一个现在被抛弃的gem。也许那里的代码可以帮助你: https://github.com/dtrasbo/formatize/blob/master/lib/formatize/helper.rb

编辑:啊,我从评论中看到,你已经看到了正在呈现的实际标记文本的问题,并且似乎对使用html_safe并将段落标记保留在HTML而不是删除它们感到满意完全是我认为你想要的。那好吧!也许我会把这个答案留给子孙后代。