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

使用Rails::Html::TargetScrubber过滤mailto链接并保留其他a标签

完整实现代码

你可以直接替换你的自定义Scrubber代码为以下内容:

class TargetedHtmlScrubber < Rails::Html::TargetScrubber
  def initialize
    super
    self.tags = %w[a]
  end

  def allowed_node?(node)
    # 识别mailto开头的链接
    href = node['href']&.downcase
    # 非mailto开头的a标签允许保留
    !href&.start_with?('mailto:')
  end

  def scrub_attribute?(name)
    # 不需要清理a标签的任何属性,全部保留
    false
  end
end

逻辑说明

  • 你之前所有a标签都被清理的原因是allowed_node?方法没有返回有效值,默认判定为不允许节点存在,所以所有a标签都被剥离。
  • allowed_node? 方法返回true时对应节点会被完整保留,返回false时节点标签会被剥离,仅保留内部文本内容。我们在方法内判断a标签的href属性是否以mailto:开头,是则返回false剥离标签,否则返回true保留标签。
  • scrub_attribute? 方法返回true时对应属性会被删除,返回false时属性保留。我们不需要过滤a标签的属性,因此统一返回false即可。

该实现可以直接通过你给出的两组测试用例,普通http/https等协议的a标签会完整保留,mailto协议的a标签会被剥离仅保留文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:30:04