Composer安装erusev/parsedown失败主因是PHP版本低于7.4,应先php -v确认版本并改用^1.7.4;安装后需手动引入vendor/autoload.php;渲染中文需htmlspecialchars转义及urldecode预处理;扩展功能推荐换用league/commonmark。

Composer 安装 erusev/parsedown 失败?先确认 PHP 版本和 Composer 状态
erusev/parsedown 最新稳定版(v1.8+)要求 PHP ≥ 7.4,如果你用的是 PHP 5.6 或 7.2,composer require erusev/parsedown 会报错 Your requirements could not be resolved,不是包名写错,是版本不兼容。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 运行
php -v确认 PHP 版本;低于 7.4 就别硬上 v1.8,改用composer require erusev/parsedown:^1.7.4 - 执行前先
composer clear-cache,尤其在换镜像源或升级 Composer 后,缓存可能卡住旧的依赖解析 - 如果项目已锁死
composer.json中的platform配置(比如"php": "7.2"),Composer 会主动降级匹配,但不会提示你“正在偷偷换版本”,得自己看composer install输出末尾的 resolved 行
require erusev/parsedown 后无法 new Parsedown()?自动加载没生效
安装成功不代表能用。常见现象是 Class 'Parsedown' not found,根源通常是没引入 autoload —— Composer 不会自动帮你 require 自动加载文件,你得自己来。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 确保项目根目录有
vendor/autoload.php(安装后应该有),然后在脚本开头加require __DIR__ . '/vendor/autoload.php'; - 别漏掉
__DIR__或写成相对路径如./vendor/autoload.php,CLI 和 Web 环境下工作目录不同,硬编码路径大概率出错 - 如果用在 Laravel、Symfony 等框架里,不用手动 require,但得确认框架没有禁用 Composer 自动加载(极少见,但自定义
composer.json的autoload段时可能误删"psr-4": {"": "src/"})
new Parsedown() 渲染中文标题乱码或链接失效?默认配置不处理 UTF-8 边界
Parsedown 默认不转义 HTML 实体,也不强制 UTF-8 解码,遇到含中文、emoji 或 URL 编码的 Markdown(比如 [测试](https://例.com)),可能输出破损 HTML 或被浏览器解析错误。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 不要直接输出
$parsedown->text($md)到页面,先过一遍htmlspecialchars($html, ENT_QUOTES, 'UTF-8'),尤其当 $md 来自用户输入 - 链接中含中文域名或路径?Parsedown 本身不负责解码,得提前
urldecode()原始 Markdown 字符串,或者用mb_convert_encoding($md, 'UTF-8', 'auto')统一编码 - 标题锚点(如
## 你好世界)生成的 id 是hello-world,不是ni-hao-shi-jie,这是设计如此,不支持中文 ID,别指望它自动拼音化
想扩展语法(比如支持表格、脚注)?别 fork erusev/parsedown,用官方扩展点
v1.8 开始支持 addPlugin(),但很多人试了 new ParsedownExtra() 发现类不存在——因为 erusev/parsedown-extra 是独立包,且已归档,不再维护。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 需要表格、围栏代码块高亮等基础扩展,直接切到活跃分支:
composer require league/commonmark:^2.4,它内置 Parsedown 兼容层,API 接近但更稳 - 坚持用 Parsedown?可用
setBreaksEnabled(true)开启换行转<br>,或重写blockHeader方法,但注意:所有方法都无类型声明,PHP 8.1+ 可能触发Deprecated: Return type of Parsedown::...警告,得自己加@return string注释压制(不推荐) - 最轻量的定制方式是 post-process:先
$html = $parsedown->text($md),再用preg_replace补充 class 或替换特定 pattern,比改解析器逻辑快得多也安全得多
实际用起来,最常卡住的不是安装,而是 autoload 路径写错、PHP 版本和包版本没对齐、还有把 Parsedown 当成“开箱即用的富文本渲染器”——它连基本 XSS 过滤都不做,这部分必须你自己兜底。



















