pixlmint/parsedown

Markdown 解析器。

1.2 2023-11-18 13:28 UTC

This package is auto-updated.

Last update: 2024-09-22 19:18:50 UTC


README

Parsedown

Parsedown

Build Status Total Downloads Version License

Better Markdown Parser in PHP - Demo.

特点

安装

安装 composer package

composer require erusev/parsedown

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

示例

use PixlMint\Parsedown\Parsedown;

$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>!

更多示例在 wiki这个视频教程 中。

安全

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 的工作原理是什么?

它试图像人类一样读取 Markdown。首先,它查看行。它对行的开始方式感兴趣。这有助于它识别块。例如,它知道如果一行以 - 开头,那么它可能属于一个列表。一旦它识别出块,它就会继续到内容。在读取的过程中,它会注意特殊字符。这有助于它识别内联元素(或内联)。

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

它符合 CommonMark 规范吗?

它通过了大多数 CommonMark 测试。大多数未通过测试的情况是非常不常见的。然而,随着 CommonMark 的发展,兼容性应该会提高。

谁在使用它?

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

我能帮到您什么?

使用它,给它加星,分享它,如果您愿意,还可以捐赠

我还应该了解些什么?

我还制作了Nota —— 一个专为 Markdown 文件设计的写作应用 :)