PHP实现markdown转换
使用Parsedown库实现Markdown转换
Parsedown是一个轻量级的PHP库,专门用于将Markdown文本转换为HTML。它支持标准的Markdown语法,并且性能优异。
安装Parsedown:
composer require erusev/parsedown
基本用法示例:
require 'vendor/autoload.php';
$parsedown = new Parsedown();
echo $parsedown->text('# Hello World!'); // 转换为<h1>Hello World!</h1>
使用CommonMark实现更标准的转换
CommonMark是Markdown的标准化版本,php-commonmark库提供了严格遵循CommonMark规范的实现。
安装php-commonmark:
composer require league/commonmark
使用示例:
use League\CommonMark\CommonMarkConverter;
$converter = new CommonMarkConverter();
echo $converter->convert('# Hello World!');
自定义Markdown转换规则
如果需要自定义转换规则,可以扩展这些库的功能。以Parsedown为例:
class MyParsedown extends Parsedown {
protected function inlineImage($excerpt) {
// 自定义图片处理逻辑
$image = parent::inlineImage($excerpt);
if ($image) {
$image['element']['attributes']['class'] = 'markdown-image';
}
return $image;
}
}
$myParsedown = new MyParsedown();
echo $myParsedown->text('');
安全考虑:净化HTML输出
当处理用户输入的Markdown时,应该净化输出的HTML以防止XSS攻击:
use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\MarkdownConverter;
$config = [
'html_input' => 'escape',
'allow_unsafe_links' => false,
];
$environment = new Environment($config);
$environment->addExtension(new CommonMarkCoreExtension());
$converter = new MarkdownConverter($environment);
$safeHtml = $converter->convert(untrustedMarkdownInput());
性能优化建议
对于高流量网站,可以考虑以下优化措施:
缓存转换结果,避免重复处理相同的Markdown内容
预编译常用Markdown模板,减少运行时开销
使用OPcache加速PHP执行
// 简单缓存示例
function convertMarkdown($text) {
static $cache = [];
$key = md5($text);
if (!isset($cache[$key])) {
$parsedown = new Parsedown();
$cache[$key] = $parsedown->text($text);
}
return $cache[$key];
}






