PHP MarkDown 解析为 HTML 的方法

erusev/parsedown 扩展

在 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

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

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/