本文目录导读:

在PHP中解析Markdown,主要有以下几种方式:
使用第三方库(推荐)
Parsedown(最流行)
// 安装:composer require erusev/parsedown require 'vendor/autoload.php'; $parsedown = new Parsedown(); $markdown = "# 标题\n\n这是**加粗**文本"; $html = $parsedown->text($markdown); echo $html;
Parsedown Extra(支持更多特性)
// 安装:composer require erusev/parsedown-extra require 'vendor/autoload.php'; $parsedown = new ParsedownExtra(); $markdown = "| 列1 | 列2 |\n|-----|-----|\n| 内容 | 内容 |"; $html = $parsedown->text($markdown); echo $html;
CommonMark(标准实现)
// 安装:composer require league/commonmark require 'vendor/autoload.php'; $converter = new League\CommonMark\CommonMarkConverter(); $markdown = "# 标题"; $html = $converter->convertToHtml($markdown); echo $html;
使用PHP自带函数(简单场景)
function simpleMarkdown($text) {
// 转义HTML
$text = htmlspecialchars($text);
// 标题
$text = preg_replace('/^### (.*)$/m', '<h3>$1</h3>', $text);
$text = preg_replace('/^## (.*)$/m', '<h2>$1</h2>', $text);
$text = preg_replace('/^# (.*)$/m', '<h1>$1</h1>', $text);
// 加粗
$text = preg_replace('/\*\*(.*?)\*\*/', '<strong>$1</strong>', $text);
// 斜体
$text = preg_replace('/\*(.*?)\*/', '<em>$1</em>', $text);
// 链接
$text = preg_replace('/\[(.*?)\]\((.*?)\)/', '<a href="$2">$1</a>', $text);
// 换行
$text = nl2br($text);
return $text;
}
完整示例:Markdown到HTML转换器
class MarkdownParser {
private $content;
public function __construct($markdown) {
$this->content = $markdown;
}
public function parse() {
$this->parseHeaders();
$this->parseBold();
$this->parseItalic();
$this->parseLinks();
$this->parseLists();
$this->parseCodeBlocks();
$this->parseParagraphs();
return $this->content;
}
private function parseHeaders() {
$this->content = preg_replace('/^### (.*)$/m', '<h3>$1</h3>', $this->content);
$this->content = preg_replace('/^## (.*)$/m', '<h2>$1</h2>', $this->content);
$this->content = preg_replace('/^# (.*)$/m', '<h1>$1</h1>', $this->content);
}
private function parseBold() {
$this->content = preg_replace('/\*\*(.*?)\*\*/', '<strong>$1</strong>', $this->content);
}
private function parseItalic() {
$this->content = preg_replace('/\*(.*?)\*/', '<em>$1</em>', $this->content);
}
private function parseLinks() {
$this->content = preg_replace('/\[(.*?)\]\((.*?)\)/', '<a href="$2">$1</a>', $this->content);
}
private function parseLists() {
// 无序列表
$this->content = preg_replace('/^- (.*)$/m', '<li>$1</li>', $this->content);
// 有序列表
$this->content = preg_replace('/^\d+\. (.*)$/m', '<li>$1</li>', $this->content);
}
private function parseCodeBlocks() {
$this->content = preg_replace('/```(\w*)?\n(.*?)```/s',
'<pre><code class="language-$1">$2</code></pre>', $this->content);
}
private function parseParagraphs() {
$parts = explode("\n\n", $this->content);
foreach ($parts as &$part) {
if (!preg_match('/^<h[1-3]>/', $part) &&
!preg_match('/^<pre>/', $part)) {
$part = '<p>' . $part . '</p>';
}
}
$this->content = implode("\n", $parts);
}
}
// 使用示例
$parser = new MarkdownParser("# 我的标题\n\n这是**加粗**文本和[链接](https://example.com)");
echo $parser->parse();
安全注意事项
// 使用Parsedown时启用安全模式 $parsedown = new Parsedown(); $parsedown->setSafeMode(true); // 禁用HTML标签 $html = $parsedown->text($markdown); // 或者手动清理 $html = strip_tags($html, '<p><a><strong><em><h1><h2><h3><ul><ol><li><code><pre><blockquote>');
性能优化建议
// 使用缓存
function parseMarkdownWithCache($markdown) {
$cacheKey = md5($markdown);
$cacheFile = '/tmp/markdown_' . $cacheKey . '.html';
if (file_exists($cacheFile)) {
return file_get_contents($cacheFile);
}
$parser = new Parsedown();
$html = $parser->text($markdown);
file_put_contents($cacheFile, $html);
return $html;
}
选择建议
- 简单需求:使用Parsedown(轻量、快速)
- 标准功能:使用CommonMark(最规范)
- 表格支持:使用Parsedown Extra
- 完整框架:使用Laravel的Markdown集成或Thunderer\Shortcode
推荐使用Parsedown,因为它既简单又功能完整,且维护活跃。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播