Composer本身不提供Markdown解析能力,真正起作用的是通过它安装的解析器库(如erusev/parsedown),该库轻量、无扩展依赖、PHP 7.2+即可运行,单文件实现且默认禁用原始HTML以提升安全性。

composer 本身不提供 Markdown 解析能力,它只是 PHP 的依赖管理工具。真正起作用的是你通过 composer 安装的解析器库——比如 erusev/parsedown 或 michelf/php-markdown。直接运行 composer require erusev/parsedown 就能拿到一个轻量、无扩展依赖、开箱即用的解析器,不需要额外配置就能处理标题、列表、链接和基础行内格式。
为什么选 parsedown 而不是其他?
- 它不依赖 DOM、不依赖
ext-dom扩展,PHP 7.2+ 即可运行 - 单文件实现(核心逻辑在
Parsedown.php),无 autoload 冲突风险 - 默认禁用原始 HTML,对用户输入更安全;如需开启,显式调用
setSafe(false) - 不自动处理表格、脚注、任务列表等扩展语法——这点反而是优势:避免隐式行为导致渲染结果不可控
常见错误:空行没被正确识别为段落分隔符
parsedown 默认把连续换行视为一个段落分隔,但如果你从表单或数据库读取内容时用了 trim() 或 str_replace("\r\n", "\n", $input),可能意外删掉关键空行。实际要保留原始换行结构,仅对首尾调用 trim():
$md = trim($_POST['content']); // ✅ 只去首尾空白 $html = (new Parsedown())->text($md);
扩展支持得手动加,不能指望 composer 自动启用
立即学习“前端免费学习笔记(深入)”;
比如你需要表格支持,erusev/parsedown 原生不带,得自己补一段解析逻辑,或者换用 league/commonmark——但它需要 PHP 8.0+,且初始化成本高:
-
league/commonmark必须用Environment::createCommonMarkEnvironment()+MarkdownConverter实例 - 启用表格要显式添加
TableExtension,锚点要加HeadingAnchorExtension - 版本不匹配会直接报
Class not found,比如league/commonmarkv2.x 和 v3.x 的扩展注册方式完全不同
最易被忽略的一点:编码必须统一为 UTF-8。如果 mb_internal_encoding() 没设好,或输入内容来自 GBK 编码的旧系统,中文标题会变成乱码,且 parsedown 不报错,只会静默丢弃非法字节。上线前务必确认:mb_internal_encoding('UTF-8') 已在入口文件中调用。



















