是的,composer安装parsedown可靠:运行composer require erusev/parsedown即可,官方包名不可写错;需手动引入vendor/autoload.php;实例化后调用parse()解析markdown字符串,不支持静态调用或文件路径。

用 Composer 安装 Parsedown 是否可靠?
是的,Parsedown 是目前 PHP 生态中最轻量、最常被采用的 Markdown 解析器之一,无依赖、纯函数式、不修改全局状态,适合嵌入到任何项目中。它不走 CommonMark 兼容路线,但对 GitHub Flavored Markdown(GFM)的常用子集支持良好,比如代码块、列表、链接、强调语法。
安装命令直接运行即可:
composer require erusev/parsedown
注意:erusev/parsedown 是官方包名,别写成 parsedown/parsedown 或其他变体,否则会安装失败或引入非官方分支。
如何正确实例化并调用 parse() 方法?
Parsedown 没有静态入口,必须 new 实例。它的 parse() 方法只接受字符串,不支持文件路径或流,也不能链式调用。常见错误是误以为它像 Markdown::convert() 那样提供静态方法。
基础用法示例:
$parsedown = new Parsedown();
$html = $parsedown->parse('# Hello World'); // <h1>Hello World</h1>
-
parse()返回的是未加包裹的 HTML 片段,不含、等结构标签 - 输入空字符串或
null会返回空字符串,不会抛异常,需自行判空 - 不自动转义 HTML —— 如果你传入含原始
<script></script>的 Markdown,它会被原样输出,存在 XSS 风险
怎样安全处理用户提交的 Markdown 内容?
直接用 Parsedown 解析用户输入等于把 HTML 过滤责任全盘交给开发者。它本身不带 sanitizer,也不识别「仅允许哪些标签」这类配置。
推荐组合方案:
- 先用
Parsedown转为 HTML - 再用
HTMLPurifier或league/html-to-markdown的反向净化逻辑(不推荐)—— 更稳妥的是用DOMDocument + strip_tags做白名单过滤,或直接上HTMLPurifier - 若只需基础防护,可手动禁用 HTML:设置
$parsedown->setMarkupEscaped(true),它会让所有原始 HTML 标签变成文本(即转义为<div>)
启用转义的写法:
$parsedown = new Parsedown();
$parsedown->setMarkupEscaped(true);
$html = $parsedown->parse('<script>alert(1)</script> **bold**');
此时输出中 <script></script> 不会被执行,但 **bold** 仍正常渲染为 <strong>bold</strong>。
为什么解析结果里没有表格或任务列表?
Parsedown 默认不支持 GFM 表格、任务列表(- [x] item)、脚注等扩展语法。这不是 bug,是设计取舍 —— 它专注核心语义,避免膨胀。
如果你确实需要表格:
- 升级到
ParsedownExtra(官方扩展):运行composer require erusev/parsedown-extra,然后new ParsedownExtra() - 注意:
ParsedownExtra依赖Parsedown,且部分解析行为与原版略有差异(如标题 ID 生成规则) - 任务列表仍不支持,得换用
cebe/markdown或自己 patchblockList()方法
别指望一个 enableGfm() 开关 —— 它没有这种配置项。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











