league/commonmark 无法转换 markdown 的 table 语法
代码
$markConverter = new \League\CommonMark\CommonMarkConverter([ 'html_input' => 'strip', 'allow_unsafe_links' => false, ]); $content = <<<'EOT' | 名字 | 年龄 | 职业 | |------|------|------| | Tom | 20 | Dev | EOT; echo $markConverter->convert($content)->getContent(), "\n";
输出
<p>| 名字 | 年龄 | 职业 | |------|------|------| | Tom | 20 | Dev |</p>
代码本身没问题,问题在于 CommonMarkConverter 只支持“标准 CommonMark”语法,不包含 GitHub 风格表格(GFM Table)。
它只支持:
标题
列表
引用
代码块
链接
图片
不支持:
table
task list
strikethrough
autolink
Markdown 里的这种表格:
| 名字 | 年龄 | 职业 |
|------|------|------|
| Tom | 20 | Dev |
属于 GFM 扩展语法,默认不会解析成 <table>,所以它被当成普通段落输出了。
最简单解决方案
直接改用 GithubFlavoredMarkdownConverter
这是最省事的方法,表格开箱即用。
use League\CommonMark\GithubFlavoredMarkdownConverter;
$converter = new GithubFlavoredMarkdownConverter([
'html_input' => 'strip',
'allow_unsafe_links' => false,
]);
$content = <<<'EOT'
| 名字 | 年龄 | 职业 |
|------|------|------|
| Tom | 20 | Dev |
EOT;
echo $converter->convert($content)->getContent();
如果你必须继续用 CommonMarkConverter
那就手动加 TableExtension:
use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\Extension\Table\TableExtension;
use League\CommonMark\MarkdownConverter;
$environment = new Environment([
'html_input' => 'strip',
'allow_unsafe_links' => false,
]);
$environment->addExtension(new CommonMarkCoreExtension());
$environment->addExtension(new TableExtension());
$converter = new MarkdownConverter($environment);
echo $converter->convert($content)->getContent();