在 PHP 项目中解析 MarkDown 文档为HTML内容推荐使用 erusev/parsedown 扩展
composer require erusev/parsedown
或者从GitHub中下载最新版本代码,在你的项目中引入 Parsedown.php
文件。
require_once Parsedown.php;
实例
$Parsedown = new Parsedown();
echo $Parsedown->text('Hello _Parsedown_!'); # 输出结果: <p>Hello <em>Parsedown</em>!</p>
你也可以只解析内联元素。
echo $Parsedown->line('Hello _Parsedown_!'); # 输出结果: Hello <em>Parsedown</em>!
启动自动换行
$Parsedown = new Parsedown();
$convertedHmtl = $Parsedown->setBreaksEnabled(true)->text($markdown);
该扩展还提供了很多其他方法对HTML 内容进行处理,如
setBreaksEnabled(true) # 启用自动换行
setMarkupEscaped(true) # 转义标记(HTML)
setUrlsLinked(false) # 阻止URL的自动链接
详细说明参考: 具体使用教程
BenjaminHoegh/ParsedownToc 是上面项目 Parsedown 的扩展,他在 Parsedown 基础上增加了获取Markdown解析目录的功能。
composer require benjaminhoegh/parsedowntoc
或者从GitHub下载最新版本代码,在你的项目中引入 ParsedownToc.php
文件。
require_once ParsedownToc.php;
实例
<?php
$content = file_get_contents('sample.md');
$Parsedown = new ParsedownToC();
// 如果存在“[toc]”标记,会将其解析为目录;
// 若没有和这个标记,只是在解析的HTML内容中给每个h标签添加点击目录进入的id锚点,可以通过 contentsList 方法单独获取目录再组装
$html = $Parsedown->text($content);
echo $html;
可以通过 contentsList
方法单独获取解析出来的目录内容
<?php
// Parse body and ToC separately
$content = file_get_contents('sample.md');
$Parsedown = new \ParsedownToC();
$body = $Parsedown->body($content);
$toc = $Parsedown->contentsList();
echo $toc; // Table of Contents in <ul> list
echo $body; // Main body
erusev/parsedown-extra 是用于 Parsedown 的 Markdown 额外扩展, 增加了对 Markdown Extra 的支持。
对于上面两个扩展实现不了的功能,可以参考该扩展,查找是否可以解决。
支持的增强功能参考文档:php Markdown Extra
[1]
erusev/parsedown 扩展: https://github.com/erusev/parsedown[2]
具体使用教程: https://github.com/erusev/parsedown/wiki/Tutorial:-Get-Started[3]
BenjaminHoegh/ParsedownToc: https://github.com/BenjaminHoegh/ParsedownToc[4]
erusev/parsedown-extra: https://github.com/erusev/parsedown-extra[5]
php Markdown Extra: https://michelf.ca/projects/php-markdown/extra/