PHP 中更好的 Markdown 解析器 — 演示
安装作曲家包:
composer require erusev/parsedown
或者下载最新版本并包含Parsedown.php
$ Parsedown = new Parsedown ();
echo $ Parsedown -> text ( ' Hello _Parsedown_! ' ); # prints : < p > Hello < em > Parsedown </ em >!</ p >
您还可以仅解析内联降价:
echo $ Parsedown -> line ( ' Hello _Parsedown_! ' ); # prints : Hello < em > Parsedown </ em >!
维基百科和本视频教程中有更多示例。
Parsedown 能够在其生成的 HTML 中转义用户输入。此外,Parsedown 还将对 Markdown 语法本身引入的其他脚本向量(例如脚本链接目标)进行清理。
要告诉 Parsedown 它正在处理不受信任的用户输入,请使用以下命令:
$ Parsedown -> setSafeMode ( true );
相反,如果您希望允许在不受信任的用户输入中使用 HTML,但仍希望输出不受 XSS 的影响,建议您使用允许将 HTML 标记列入白名单的 HTML 清理程序,例如 HTML Purifier。
在这两种情况下,您都应该强烈考虑采用纵深防御措施,例如部署内容安全策略(浏览器安全功能),以便即使攻击者在第一个中发现漏洞,您的页面也可能是安全的上面的防线。
使用 Parsedown 扩展时,安全模式不一定会产生安全结果。应自行评估扩展以确定其针对 XSS 的特定安全性。
警告:此方法无法抵御 XSS!
如果您希望在受信任的输入中转义 HTML,您可以使用以下命令:
$ Parsedown -> setMarkupEscaped ( true );
请注意,这仍然允许用户插入不安全的脚本向量,例如: [xss](javascript:alert%281%29)
。
Parsedown 是如何工作的?
它尝试像人类一样阅读 Markdown。首先,它看线条。它对线路如何开始感兴趣。这有助于它识别块。例如,它知道如果一行以-
开头,那么它可能属于一个列表。一旦它识别出块,它就会继续处理内容。当它读取时,它会留意特殊字符。这有助于它识别内联元素(或内联)。
我们将这种方法称为“基于线路”。我们相信 Parsedown 是第一个使用它的 Markdown 解析器。自从 Parsedown 发布以来,其他开发人员已经使用相同的方法用 PHP 和其他语言开发其他 Markdown 解析器。
是否符合 CommonMark 标准?
它通过了大部分 CommonMark 测试。大多数未通过的测试都涉及非常不常见的情况。不过,随着 CommonMark 的成熟,合规性应该会得到改善。
谁使用它?
Laravel Framework、Bolt CMS、Grav CMS、Herbie CMS、Kirby CMS、October CMS、Pico CMS、Statamic CMS、phpDocumentor、RaspberryPi.org、Symfony Demo 等。
我能提供什么帮助吗?
使用它、加注星标、分享它,如果您感到慷慨,请捐赠。
我还应该知道什么?
我还制作了 Nota——一个专为本地 Markdown 文件设计的笔记应用程序。