erusev/parsedown

Markdown 解析器。

安装次数: 126,846,971

依赖项: 792

建议者: 28

安全: 2

星标: 14,735

关注者: 214

分支: 1,123

开放问题: 157


README

Parsedown

Parsedown

Total Downloads Version License

Better Markdown Parser in PHP — 演示

功能

安装

安装 composer 包

composer require erusev/parsedown

或下载最新发布版 并包含 Parsedown.php

示例

$Parsedown = new Parsedown();

echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>

您还可以仅解析行内 Markdown

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 的具体安全性。

转义 HTML

警告:此方法无法防止 XSS!

如果您想在受信任的输入中转义 HTML,可以使用以下方法

$Parsedown->setMarkupEscaped(true);

请注意,这仍然允许用户插入不安全的脚本向量,例如 [xss](javascript:alert%281%29)

问题

Parsedown 是如何工作的?

Parsedown 尝试像人类一样读取 Markdown。首先,它查看行。它关注行的起始方式。这有助于它识别块。例如,如果一行以 - 开头,那么它可能属于列表。一旦识别出块,它就继续到内容。在阅读时,它还会注意特殊字符。这有助于它识别行内元素(或内联元素)。

我们将这种方法称为“基于行”。我们相信 Parsedown 是第一个使用此方法的 Markdown 解析器。自 Parsedown 发布以来,其他开发人员已使用相同的方法在 PHP 和其他语言中开发了其他 Markdown 解析器。

它符合 CommonMark 规范吗?

它通过了大多数的CommonMark测试。大多数未通过测试的情况都是相当罕见的。然而,随着CommonMark的成熟,兼容性应该会提高。

谁在使用它?

Laravel框架Bolt CMSGrav CMSHerbie CMSKirby CMSOctober CMSPico CMSStatamic CMSphpDocumentorRaspberryPi.orgSymfony Demo以及更多

我如何帮助?

使用它,给它打星,分享它,如果你觉得慷慨,还可以捐赠

我还应该知道什么?

我还制作了Nota——一个专为本地Markdown文件设计的笔记应用。