如何在 Ruby 中限制 Markdown 语法?

2024-02-03

我希望使用 Ruby 库在 Rails CMS 评论系统中实现 Markdown,例如Maraku http://maruku.rubyforge.org/ or Kramdown http://kramdown.rubyforge.org。我需要限制用户可以提交哪些 Markdown 功能。在此系统中,用户不允许插入图像、html 或执行任何繁重的编辑,但强调和超链接是可以的。

本质上,我希望创建类似的东西这种纺织过滤器 http://jeff.jones.be/technology/articles/textile-filtering-with-redcloth/,但对于 Markdown 语法。


我一直在使用降价转换后的第二步来清理数据消毒宝石 http://wonko.com/post/sanitize。它基于白名单并且非常可配置,您可以轻松地实现您所追求的目标。

为了节省您的时间,这是我的文本格式化程序模块,希望对您有所帮助。内置的宽松规则对我来说有点太严格了。

module TextFormatter
  require 'sanitize'

  module Formatters
    MARKDOWN = 1
    TEXTILE = 2
  end

  RELAXED = {
      :elements => [
        'a', 'b', 'blockquote', 'br', 'caption', 'cite', 'code', 'col',
        'colgroup', 'dd', 'dl', 'dt', 'em', 'i', 'img', 'li', 'ol', 'p', 'pre',
        'q', 'small', 'strike', 'strong', 'sub', 'sup', 'table', 'tbody', 'td',
        'tfoot', 'th', 'thead', 'tr', 'u', 'ul', 'del', 'ins', 'h1', 'h2', 'h3', 'h4', 'h5', 'h5', 'hr', 'kbd'],

      :attributes => {
        'a'          => ['href', 'title'],
        'blockquote' => ['cite'],
        'col'        => ['span', 'width'],
        'colgroup'   => ['span', 'width'],
        'img'        => ['align', 'alt', 'height', 'src', 'title', 'width'],
        'ol'         => ['start', 'type'],
        'q'          => ['cite'],
        'table'      => ['summary', 'width'],
        'td'         => ['abbr', 'axis', 'colspan', 'rowspan', 'width'],
        'th'         => ['abbr', 'axis', 'colspan', 'rowspan', 'scope',
                         'width'],
        'ul'         => ['type']
      },

      :protocols => {
        'a'          => {'href' => ['ftp', 'http', 'https', 'mailto',
                                    :relative]},
        'blockquote' => {'cite' => ['http', 'https', :relative]},
        'img'        => {'src'  => ['http', 'https', :relative]},
        'q'          => {'cite' => ['http', 'https', :relative]}
      }
    }



  def self.to_html(text, formatter = Formatters::MARKDOWN)
    return "" unless text

    html = case formatter 
           when Formatters::MARKDOWN then
             RDiscount.new(text, :smart).to_html
           when Formatters::TEXTILE then
             RedCloth.new(text).to_html
           end

    Sanitize.clean(html, RELAXED) 
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ruby 中限制 Markdown 语法? 的相关文章

  • Rails 急切加载计数?

    使用 include 属性可以很好地进行预加载 Post find all include gt author 我想知道您是否也可以急切加载计数 例如我是否想获取每个帖子的评论数量 而不加载所有评论本身 也许像 Post find all
  • 默认更新嵌套属性

    我尝试更新 iProduction 这是生产中的嵌套表单 但此行出现参数错误 参数数量错误 0 代表 1 生产 update iproducts attributes cow id cow 我的创作动作制作 def create produ
  • 使用 mysql2 gem 获取最后插入的 id

    我有这样的代码 require mysql2 db query insert into clients Name values client 我可以通过 1 个查询返回最后插入的 ID 吗 您可以使用last id客户端实例的方法 clie
  • 带有嵌入式 Ruby 的 Javascript:如何安全地将 ruby​​ 值分配给 javascript 变量

    我在页面的 javascript 块中有这一行 res foo 处理这种情况的最佳方法是什么 ruby var里面有单引号吗 否则会破坏 JavaScript 代码 我想我会用红宝石JSON http json org ruby var 上
  • 有没有一种好方法来计算 ruby​​ 中范围元素的总和

    计算范围总和的好方法是什么 Input 4 10 Output 4 5 6 7 8 9 10 49 您可以使用EnumerableRange 对象上的方法 在本例中使用Enumerable inject 4 10 inject gt 49
  • ruby 1.9.1 的 gem install mongrel 失败

    昨天我开始了 Rails 开发 我安装了 ruby 1 9 1 rubygems 和 Rails 跑步gem install mongrel工作得很好 表面上也安装了杂种 我有点困惑 因为 script server 默认启动 webric
  • 我可以从安装 Rails 引擎的真实应用程序运行它的规格吗?

    我有一个 Rails 引擎 旨在为我们的一个更大的项目提供一些模型和控制器 引擎有一套相当不错的规格 在引擎的虚拟应用程序中使用了一堆模拟和一些全尺寸模型和控制器 以确保引擎正在做它应该做的事情并与更大的应用程序一起工作 然而 即使所有测试
  • 使用 google-drive-ruby gem 在 google 云端硬盘中创建文件夹

    我知道这里提出了类似的问题 但是我仍然无法完成这项工作 因为我的情况有点不同 我希望能够使用以下命令在谷歌驱动器中创建一个文件夹谷歌驱动器红宝石宝石 https github com gimite google drive ruby 根据谷
  • A has_many Bs 其中 B 没有主键

    我有型号 A 和 B A has many B 并且 B 属于 A 到目前为止 一切都很好 除了我指定 B 没有主键 我不打算修改或删除单个 B 行 并且我预计会有数百万到数十亿的 B 行 因此省略主键将非常方便 节省空间 创建 B 表的迁
  • 开始使用 Ruby、Watir 和 Ruby Mine?

    我想对电子商务网站进行自动化测试 我安装了 Ruby Watir Gems 和 Ruby Mine 虽然我尝试过 RubyMine 但我不知道如何开始编写一个简单的脚本 如何开始使用 RubyMine 编写简单的脚本 我创建了一个项目 你下
  • 无法在 IE 上运行 Selenium 脚本

    我必须在 IE 10 浏览器上运行 Selenium 测试 为了运行以下脚本 我执行了以下操作 下载IEDriverServer 64位 因为我的机器是64位 here http code google com p selenium dow
  • 如何使用 AngularJS、Devise 和 UI Router 全局实现身份验证?

    我对 Angular 很陌生 所以这可能是一个新手问题 我正在尝试实现一个简单的任务管理器 只是一个练习 以 Rails 作为后端 以 Angular 作为前端 到目前为止 我遵循了教程 一切正常 现在我想在全球范围内实施身份验证 这意味着
  • Rails - 可以在 javascript 函数中设置 Rails 变量吗?

    在 javascript 函数中设置 Rails 变量有什么问题吗 我无法在谷歌上搜索到明确的答案 只是想确保没有我不知道的陷阱或缺陷 我实际上对它是如何工作的感到困惑 如果 javascript 在客户端执行 我不会假设 Rails 会在
  • 这个结果背后的逻辑是什么?

    def foo override end p foo bye bye p foo hello world Output override hello 我可以理解如果结果是 override world or even bye bye hel
  • Ruby 解释器出现段错误后,是否可以从 corefile 中获取 Ruby 回溯?

    Note 我使用了在使用 libxml ruby gem 时遇到的段错误来说明问题 但我已经用所述 gem 解决了我的问题 这个问题真正涉及的是从 gdb 使用 corefile 查看 Ruby 回溯 即解释器在 Ruby 代码无法处理异常
  • Rails 应用程序在模型间保存方面遇到问题

    我正在开发一个从网站下载元标签并然后保存的应用程序 下载发生在一个名为Site 我想将下载的机器人元标签保存到一个名为的模型中robots tag它通过一个名为的连接表连接到站点meta tag sites 但是我在站点模型中编写的用于执行
  • Jekyll 站点仅在推送到 GitHub 时才会失败

    我正在使用 Jekyll 开发一个新版本的静态网站 该网站通过 Github 页面部署 https devcampy com https devcampy com 存储库 https github com gianarb devcampy
  • ruby 包含问题

    class Foo def initialize a puts Hello a end end module Bar def initialize b puts b World end end class Sample lt Foo inc
  • 在您的装置数据中发现外键违规。确保您没有引用关联中不存在的标签

    我运行一个测试 rake test TEST test system my test rb 并看到这个 rake test TEST test system my test rb Running 1 tests in a single pr
  • Rails 7 缺失部分

    我正在升级到 Rails 7 1 并在使用 JS 部分的视图中遇到奇怪的错误 缺少部分 account stripe js erb application stripe js erb 与 locale gt fr formats gt ht

随机推荐