condenast-spain / parsedown
Markdown 解析器。
Requires
- php: >=5.3.0
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^4.8.35
- dev-master
- 2.0.x-dev
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- 1.0.0-rc.5
- 1.0.0-rc.4
- 1.0.0-rc.3
- 1.0.0-rc.2
- 1.0.0-rc.1
- 0.9.4
- 0.9.3
- 0.9.2
- 0.9.1
- 0.9.0
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.7
- 0.7.6
- 0.7.5
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.1
- 0.2.0
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
This package is not auto-updated.
Last update: 2024-09-29 05:21:13 UTC
README
PHP 中更好的 Markdown 解析器
特性
- 单文件
- 无依赖
- 超快
- 可扩展
- 支持 GitHub 风格
- 支持 5.3 到 7.2 和 HHVM 版本
- Markdown Extra 扩展
安装
Composer
运行以下命令安装 composer 包
composer require condenast-spain/parsedown
手动
- 从 最新发布版 下载 "源代码"
- 包含
Parsedown.php
示例
$Parsedown = new Parsedown(); echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p> // you can also parse inline markdown only echo $Parsedown->line('Hello _Parsedown_!'); # prints: Hello <em>Parsedown</em>!
安全性
Parsedown 能够在它生成的 HTML 中转义用户输入。此外,Parsedown 还会应用其他脚本向量(如脚本链接目标)的净化,这些脚本向量是由 markdown 语法本身引入的。
要告诉 Parsedown 它正在处理不可信的用户输入,请使用以下方法
$parsedown = new Parsedown; $parsedown->setSafeMode(true);
如果您希望在不信任的用户输入中允许 HTML,但仍希望输出无 XSS,则建议使用允许 HTML 标签白名单的 HTML 清洁器,例如 HTML Purifier。
在两种情况下,您都应强烈考虑采用多层次防御措施,如部署 内容安全策略(浏览器安全功能),以确保即使在攻击者发现上述第一道防线中的漏洞时,您的页面也可能保持安全。
Parsedown 扩展的安全性
在使用 Parsedown 扩展时,安全模式不一定能产生安全的结果。应单独评估扩展,以确定其对 XSS 的具体安全性。
转义 HTML
⚠️ 警告:此方法不安全,可能存在 XSS 风险!
如果您希望在不信任的输入中转义 HTML,可以使用以下方法
$parsedown = new Parsedown; $parsedown->setMarkupEscaped(true);
请注意,这仍然允许用户插入不安全的脚本向量,例如 [xss](javascript:alert%281%29)
这样的链接。
问题
Parsedown 是如何工作的?
Parsedown 尝试像人类一样读取 Markdown。首先,它查看行。它对行的开头很感兴趣。这有助于它识别块。例如,如果一行以 -
开头,那么它可能属于列表的一部分。一旦它识别出块,它就继续到内容。在阅读的过程中,它会关注特殊字符。这有助于它识别内联元素(或内联)。
我们称这种方法为“基于行的方法”。我们相信 Parsedown 是第一个采用此方法的 Markdown 解析器。自从 Parsedown 发布以来,其他开发人员已经使用相同的方法在 PHP 和其他语言中开发了其他 Markdown 解析器。
它符合 CommonMark 吗?
它通过了大多数 CommonMark 测试。大多数未通过测试的情况都涉及非常不常见的情况。然而,随着 CommonMark 的成熟,兼容性应该会提高。
谁在使用它?
Laravel 框架,Bolt CMS,Grav CMS,Herbie CMS,Kirby CMS,October CMS,Pico CMS,Statamic CMS,phpDocumentor,RaspberryPi.org,Symfony 示例等等。