You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby on Rails中关闭Redcarpet的特定标签并仅启用指定标签?

解决Redcarpet只启用指定Markdown标签的问题

我之前也踩过Redcarpet的这个坑!问题根源在于你混淆了Redcarpet的核心语法解析和扩展功能的控制逻辑:你尝试设置的codespan: false这类参数是用来控制扩展功能的,但像斜体、代码段、列表这些属于Redcarpet的核心语法,默认就会被解析,没法通过初始化选项直接关闭。要实现“只启用少数指定标签”,可以用以下两种方案:

方案1:重写自定义渲染器(最彻底,控制核心语法)

如果要严格禁用大部分核心语法,只保留你需要的少数标签,最靠谱的方式是在自定义渲染器里重写对应的方法,让不需要的语法直接返回原文本,不做渲染处理。

举个例子:假设你只想保留粗体(**文本**)和普通段落,其他所有语法都禁用,你的CustomRender可以这么写:

class CustomRender < Redcarpet::Render::HTML
  # 只保留粗体的渲染逻辑
  def double_emphasis(text)
    "<strong>#{text}</strong>"
  end

  # 保留段落渲染(如果不需要段落格式化,直接返回text即可)
  def paragraph(text)
    "<p>#{text}</p>"
  end

  # 重写所有不需要的语法方法,直接返回原内容
  def emphasis(text) # 禁用斜体(*文本*)
    text
  end

  def codespan(code) # 禁用代码段(`代码`)
    code
  end

  def list(contents, list_type) # 禁用列表
    contents
  end

  def list_item(text, list_type) # 禁用列表项
    text
  end

  def link(link, title, content) # 禁用链接
    content
  end

  def image(link, title, alt_text) # 禁用图片
    alt_text
  end

  # 其他你想禁用的语法,比如删除线、上标等,都可以按这个方式重写对应方法
end

然后你的markdown方法可以保持原来的结构:

def markdown(text)
  options = {} # 不需要扩展的话留空即可
  renderer = CustomRender.new(hard_wrap: true, filter_html: true)
  Redcarpet::Markdown.new(renderer, options).render(text).html_safe
end

方案2:控制扩展功能(仅针对非核心语法)

如果你的需求只是关闭扩展语法(比如表格、自动链接、脚注这些),而核心语法(斜体、列表等)本来就想保留部分,那可以通过初始化选项先禁用所有默认扩展,再手动开启你需要的:

def markdown(text)
  # 先禁用所有默认扩展,再按需开启需要的(比如只开启表格)
  options = {
    no_autolink: true,
    no_strikethrough: true,
    no_superscript: true,
    no_underline: true,
    no_highlight: true,
    no_footnotes: true,
    disable_indented_code_blocks: true,
    # 开启你需要的扩展,比如表格
    tables: true
  }
  renderer = CustomRender.new(hard_wrap: true, filter_html: true)
  Redcarpet::Markdown.new(renderer, options).render(text).html_safe
end

注意:这种方法只能控制扩展语法,核心语法(斜体、代码段、列表)还是会被渲染,所以要禁用核心语法,必须用方案1。

为什么你的codespan: false不生效?

因为codespan是Redcarpet的核心语法,不属于扩展选项的控制范围,所以设置这个参数根本不会起作用。要禁用代码段,必须在自定义渲染器里重写codespan方法,让它返回原代码文本而不是<code>标签。


内容的提问来源于stack exchange,提问作者blackhole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:47:40