【推荐】使用 PHP 将 HTML 转换为 Markdown

十年_叶开 (UID: 3018) 2022-9-5

1181 7

为什么要将 HTML 转换为 Markdown?

“这是什么炼金术?” 你喃喃自语。“我明白你为什么要将Markdown 转换为 HTML,”你继续说,已经有点费力地问这个问题了,“但为什么要反其道而行之呢?”

通常,如果出现以下情况,您会将 HTML 转换为 Markdown:

  1. 您有一个现有的 HTML 文档,需要由有品位的人编辑。
  2. 您想以 HTML 格式存储新内容,但将其编辑为 Markdown。
  3. 您想要将 HTML 电子邮件转换为纯文本电子邮件。
  4. 你认识一个多年来一直将 HTML 转换为 Markdown 的人,现在他可以说精灵语了。你很想会说精灵语。
  5. 你真的很喜欢 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 的xmllib-xmldom扩展,所有这些在大多数发行版上都默认启用。

可以通过安装 php-xml 来解决诸如 CentOS 等禁用 PHP 的 xml 扩展的发行版上的“致命错误:找不到类 'DOMDocument'”之类的错误。

 

Github : 地址

这家伙太懒了,什么也没留下。
已有评论 (7)
  • 头像
    TeacherDu (UID: 3057) @Ta
    2022-9-5
    1
    夏目玩的越来越高级了
  • 头像
    十年_叶开 (UID: 3018) @Ta
    2022-9-5
    2
    TeacherDu 夏目玩的越来越高级了
    去年不是  转博客程序吗?  哈哈  手动转html  又后面转  markdown    现在方便了      来回转  哈哈!!
  • 头像
    fireblood (UID: 3493) @Ta
    2022-9-15
    3
    这种主题还审核10天没通过?
  • 头像
    TeacherDu (UID: 3057) @Ta
    2022-11-12
    4
    叶开 去年不是 转博客程序吗? 哈哈 手动转html 又后面转 markdown 现在方便了 来回转 哈哈!!
    你就喜欢折腾!
  • 头像
    十年_叶开 (UID: 3018) @Ta
    2022-11-13
    5
    TeacherDu 你就喜欢折腾!
    哈哈,我现在折腾采集站,什么都搞好了,就是没有服务器给我挂  哈哈
  • 头像
    TeacherDu (UID: 3057) @Ta
    2022-11-13
    6
    叶开 哈哈,我现在折腾采集站,什么都搞好了,就是没有服务器给我挂 哈哈
    采集站的资源消耗较多,不少主机商都禁止采集站呢
    • 大佬论坛
      8
      登录后才可回帖  登录 注册

本站同款香港KC服务器 酷盾安全联盟 智能优化防护 ROOVPS 便宜服务器 盾云SCDN 月付只需1元起 点我免费领取大流量卡