league/commonmark是由 Colin O'Dell 创建的高度可扩展的 PHP Markdown 解析器,它支持完整的 CommonMark 规范和 GitHub 风格的 Markdown。 它基于 John MacFarlane (@jgm) 的 CommonMark JS 参考实现。
该项目需要 PHP 7.4 或更高版本以及mbstring
扩展。 要通过 Composer 安装它,只需运行:
$ 作曲家需要联盟/共同马克
CommonMarkConverter
类提供了一个简单的包装器,用于将 CommonMark 转换为 HTML:
使用 LeagueCommonMarkCommonMarkConverter;$converter = new CommonMarkConverter(['html_input' => 'strip','allow_unsafe_links' => false, ]);echo $converter->convert('# Hello World!');// <h1>Hello World!</h1>
或者,如果您想要 GitHub 风格的 Markdown,请改用GithubFlavoredMarkdownConverter
类:
使用 LeagueCommonMarkGithubFlavoredMarkdownConverter;$converter = new GithubFlavoredMarkdownConverter(['html_input' => 'strip','allow_unsafe_links' => false, ]);echo $converter->convert('# Hello World!');// <h1>Hello World!</h1>
请注意,仅支持 UTF-8 和 ASCII 编码。 如果您的 Markdown 使用不同的编码,请在通过此库运行之前将其转换为 UTF-8。
警告
如果您要解析来自用户的不受信任的输入,请考虑根据上面的示例设置html_input
和allow_unsafe_links
选项。请参阅 https://commonmark.thephpleague.com/security/ 了解更多详细信息。如果您还选择允许不受信任的用户输入原始 HTML,请考虑使用库(如 HTML Purifier)来提供额外的 HTML 过滤。
有关高级使用、配置和自定义的完整文档可以在 commonmark.thephpleague.com 上找到。
有关如何升级到该库的较新版本的信息,请访问 https://commonmark.thephpleague.com/releases。
前面显示的GithubFlavoredMarkdownConverter
是CommonMarkConverter
的直接替代品,它添加了 GFM 规范中的附加功能:
自动链接
不允许的原始 HTML
删除线
表格
任务列表
请参阅扩展文档,了解有关如何仅包含某些 GFM 功能(如果您不需要全部功能)的更多详细信息。
蛋糕PHP 3
德鲁帕尔
拉拉维尔 4+
杜父鱼
交响乐 2 和 3
交响乐4
Twig Markdown 扩展
树枝过滤器和标签
Laravel CommonMark 博客
请参阅我们的扩展文档,了解与该库捆绑的扩展的完整列表。
自定义解析器/渲染器可以捆绑到扩展 CommonMark 的扩展中。 以下是一些您可能会感兴趣的内容:
Emoji 扩展 - 带有 Github 标签的 UTF-8 emoji 扩展。
Sup Sub 扩展 - 添加对上标和下标( <sup>
和<sub>
HTML 标记)的支持
YouTube iframe 扩展 - 用 iframe 替换 YouTube 链接。
延迟图像扩展 - 添加延迟加载图像的各种选项。
标记扩展 - 添加对突出显示文本( <mark>
HTML 标记)的支持
其他可以在 Packagist 上的commonmark-extension
包类型下找到。
如果您自己构建,请随时提交 PR 将其添加到此列表中!
查看人们使用league/commonmark
所做的其他很酷的事情:https://packagist.org/packages/league/commonmark/dependents
SemVer 受到密切关注。次要版本和补丁版本不应对代码库引入重大更改;但是,它们可能会更改解析后的 Markdown 的 AST 或 HTML 输出(由于错误修复、规范更改等)。因此,您可能会得到略有不同的 HTML,但在此库上构建的任何自定义代码仍应正常运行。
任何标记为@internal
类或方法都不适合在该库之外使用,并且随时可能发生重大更改,因此请避免使用它们。
当新的次要版本(例如2.0
-> 2.1
)发布时,前一个版本( 2.0
)将继续接收安全和关键错误修复至少3 个月。
当发布新的主要版本(例如1.6
-> 2.0
)时,前一个版本( 1.6
)将在新版本发布后至少3 个月内收到关键错误修复,并在 6 个月内收到安全更新。
(此政策将来可能会发生变化,并且可能会根据具体情况制定例外情况。)
通过 Tidelift 订阅可以获得专业支持,包括新版本和安全更新的通知。
要报告安全漏洞,请使用 Tidelift 安全联系人。 Tidelift 将与我们协调修复和披露。
如果您在规范中遇到错误,请将其报告给 CommonMark 项目。 任何由此产生的修复最终也将在该项目中实施。
欢迎对该库做出贡献,尤其是:
提高可用性或灵活性,同时不影响我们遵守 CommonMark 规范的能力
对参考实现进行镜像修复
优化性能
修复遵守 CommonMark 规范的问题
如果可能的话,应避免对核心解析逻辑进行重大重构,以便我们可以轻松跟踪对参考实现的更新。话虽这么说,我们绝对会考虑不会偏离参考规范太远或受到其他流行 CommonMark 实现青睐的更改。
请参阅贡献以获取更多详细信息。
$ 作曲家测试
这还将根据最新支持的规范测试 league/commonmark。
您可以通过运行附带的基准测试工具将league/commonmark的性能与其他流行的解析器进行比较:
$ ./tests/benchmark/benchmark.php
该代码最初基于 CommonMark JS 参考实现,该实现由 John MacFarlane 编写、维护并拥有版权。 如果没有他的工作,这个项目根本就不会存在。
非常感谢我们所有出色的贡献者:
我们还要向支持该项目持续发展的以下赞助商致以诚挚的谢意:
Tidelift 通过其专业支持计划为维护人员和最终用户提供支持
Blackfire 用于提供 Open-Source Profiler 订阅
JetBrains 通过免费的 PhpStorm 许可证支持该项目
您有兴趣赞助该项目的开发吗?请参阅 https://www.colinodell.com/sponsor 了解贡献方式列表。
league/commonmark根据 BSD-3 许可证获得许可。 有关更多详细信息,请参阅LICENSE
文件。
该项目主要由 Colin O'Dell 维护。 PHP 联盟领导团队的成员有时可能会协助履行其中一些职责。
该项目被 Drupal、Laravel Framework、Cachet、Firefly III、Neos、Daux.io 等使用!
通过 Tidelift 订阅获得联赛/commonmark 的专业支持
Tidelift 帮助维护人员实现开源的可持续发展,同时为公司提供支持
有关其依赖项的安全性、维护和许可的保证。