为什么要将 HTML 转换为 Markdown?
“这是什么炼金术?” 你喃喃自语。“我明白你为什么要将Markdown 转换为 HTML,”你继续说,已经有点费力地问这个问题了,“但为什么要反其道而行之呢?”
通常,如果出现以下情况,您会将 HTML 转换为 Markdown:
- 您有一个现有的 HTML 文档,需要由有品位的人编辑。
- 您想以 HTML 格式存储新内容,但将其编辑为 Markdown。
- 您想要将 HTML 电子邮件转换为纯文本电子邮件。
- 你认识一个多年来一直将 HTML 转换为 Markdown 的人,现在他可以说精灵语了。你很想会说精灵语。
- 你真的很喜欢 Markdown。
如何使用它
通过发出以下命令来要求库:
composer require league/html-to-markdown
添加require 'vendor/autoload.php';到脚本的顶部。
接下来,创建一个新的 HtmlConverter 实例,将您的有效 HTML 代码传递给它的convert()函数:
use League\HTMLToMarkdown\HtmlConverter;
$converter = new HtmlConverter();
$html = "<h3>Quick, to the Batpoles!</h3>";
$markdown = $converter->convert($html);
该$markdown变量现在包含 HTML 的 Markdown 版本作为字符串:
echo $markdown; // ==> ### Quick, to the Batpoles!
包含demo的目录包含一个 HTML->Markdown 转换表单以供试用。
转换选项
默认情况下,HTML To Markdown 保留没有 Markdown 等效项的 HTML 标记,例如<span>和<div>.
要去除没有 Markdown 等效项的 HTML 标签,同时保留其中的内容,请设置strip_tags为 true,如下所示:
$converter = new HtmlConverter(array('strip_tags' => true));
$html = '<span>Turnips!</span>';
$markdown = $converter->convert($html); // $markdown now contains "Turnips!"
或者更明确地说,像这样:
$converter = new HtmlConverter();
$converter->getConfig()->setOption('strip_tags', true);
$html = '<span>Turnips!</span>';
$markdown = $converter->convert($html); // $markdown now contains "Turnips!"
请注意,只有标签本身被剥离,而不是它们所包含的内容。
要去除标签及其内容,请在 中传递一个以空格分隔的标签列表remove_nodes,如下所示:
$converter = new HtmlConverter(array('remove_nodes' => 'span div'));
$html = '<span>Turnips!</span><div>Monkeys!</div>';
$markdown = $converter->convert($html); // $markdown now contains ""
默认情况下,所有评论都会从内容中删除。要保留它们,请使用该preserve_comments选项,如下所示:
$converter = new HtmlConverter(array('preserve_comments' => true));
$html = '<span>Turnips!</span><!-- Monkeys! -->';
$markdown = $converter->convert($html); // $markdown now contains "Turnips!<!-- Monkeys! -->"
要仅保留特定注释,请preserve_comments使用字符串数组进行设置,如下所示:
$converter = new HtmlConverter(array('preserve_comments' => array('Eggs!')));
$html = '<span>Turnips!</span><!-- Monkeys! --><!-- Eggs! -->';
$markdown = $converter->convert($html); // $markdown now contains "Turnips!<!-- Eggs! -->"
默认情况下,占位符链接被保留。要去除占位符链接,请使用该strip_placeholder_links选项,如下所示:
$converter = new HtmlConverter(array('strip_placeholder_links' => true));
$html = '<a>Github</a>';
$markdown = $converter->convert($html); // $markdown now contains "Github"
样式选项
默认情况下,粗体标签使用星号语法进行转换,斜体标签使用下划线语法进行转换。使用bold_style和italic_style选项更改这些。
$converter = new HtmlConverter();
$converter->getConfig()->setOption('italic_style', '*');
$converter->getConfig()->setOption('bold_style', '__');
$html = '<em>Italic</em> and a <strong>bold</strong>';
$markdown = $converter->convert($html); // $markdown now contains "*Italic* and a __bold__"
换行选项
默认情况下,br标签被转换为两个空格,后跟一个换行符,就像传统的 Markdown一样。根据 GitHub Flavored Markdown (GFM),设置hard_break为省略两个空格。true
$converter = new HtmlConverter();
$html = '<p>test<br>line break</p>';
$converter->getConfig()->setOption('hard_break', true);
$markdown = $converter->convert($html); // $markdown now contains "test\nline break"
$converter->getConfig()->setOption('hard_break', false); // default
$markdown = $converter->convert($html); // $markdown now contains "test \nline break"
自动链接选项
默认情况下,a标签被转换为最简单的链接语法,即如果没有可用的文本或标题,那么<url>将使用该语法而不是完整的[url](url)语法。设置use_autolinks为false将此行为更改为始终使用完整链接语法。
$converter = new HtmlConverter();
$html = '<p><a href="https://thephpleague.com">https://thephpleague.com</a></p>';
$converter->getConfig()->setOption('use_autolinks', true);
$markdown = $converter->convert($html); // $markdown now contains "<https://thephpleague.com>"
$converter->getConfig()->setOption('use_autolinks', false); // default
$markdown = $converter->convert($html); // $markdown now contains "[https://google.com](https://google.com)"
传递自定义环境对象
您可以传递当前Environment对象来自定义,即应该使用哪些转换器。
$environment = new Environment(array(
// your configuration here
));
$environment->addConverter(new HeaderConverter()); // optionally - add converter manually
$converter = new HtmlConverter($environment);
$html = '<h3>Header</h3>
<img src="" />
';
$markdown = $converter->convert($html); // $markdown now contains "### Header" and "<img src="" />"
桌子支撑
默认情况下不启用对 Markdown 表的支持,因为它不是原始 Markdown 语法的一部分。要使用表,请显式添加转换器:
use League\HTMLToMarkdown\HtmlConverter;
use League\HTMLToMarkdown\Converter\TableConverter;
$converter = new HtmlConverter();
$converter->getEnvironment()->addConverter(new TableConverter());
$html = "<table><tr><th>A</th></tr><tr><td>a</td></tr></table>";
$markdown = $converter->convert($html);
限制
- 不支持 Markdown Extra、MultiMarkdown 和其他变体——只支持 Markdown。
风格注释
-
Settext(下划线)标题是 H1 和 H2 的默认标题。如果您更喜欢 H1 和 H2 的 ATX 样式(# Header 1 和 ## Header 2),header_style请在实例化对象时在选项数组中设置为 'atx':
$converter = new HtmlConverter(array('header_style'=>'atx'));
H3 和更低优先级的标头始终使用 atx 样式。
-
链接和图像被内联引用。不使用脚注引用(脚注中列出了图像 src 和锚点 href 属性)。
-
块引用不是换行的——它使转换后的 Markdown 更容易编辑。
依赖项
HTML To Markdown 需要 PHP 的xml、lib-xml和dom扩展,所有这些在大多数发行版上都默认启用。
可以通过安装 php-xml 来解决诸如 CentOS 等禁用 PHP 的 xml 扩展的发行版上的“致命错误:找不到类 'DOMDocument'”之类的错误。
Github : 地址