league / html-to-markdown
PHP 的 HTML 到 Markdown 转换助手
Requires
- php: ^7.2.5 || ^8.0
- ext-dom: *
- ext-xml: *
Requires (Dev)
- mikehaertl/php-shellcommand: ^1.1.0
- phpstan/phpstan: ^1.8.8
- phpunit/phpunit: ^8.5 || ^9.2
- scrutinizer/ocular: ^1.6
- unleashedtech/php-coding-standard: ^2.7 || ^3.0
- vimeo/psalm: ^4.22 || ^5.0
- dev-master / 5.2.x-dev
- 5.1.1
- 5.1.0
- 5.0.2
- 5.0.1
- 5.0.0
- 4.10.0
- 4.9.1
- 4.9.0
- 4.8.3
- 4.8.2
- 4.8.1
- 4.8.0
- 4.7.0
- 4.6.2
- 4.6.1
- 4.6.0
- 4.5.0
- 4.4.1
- 4.4.0
- 4.3.1
- 4.3.0
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.1
- 4.0.0
- 3.1.1
- 3.1.0
- 3.0.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- dev-renovate/phpunit-phpunit-11.x
- dev-fix-pipelines
- dev-convert-lists-to-four-spaces
- dev-feature-preserve-attributes
This package is auto-updated.
Last update: 2024-09-14 10:38:27 UTC
README
一个库,可以将 HTML 转换为 Markdown,以便您安心并方便地使用。
要求: PHP 7.2+
主要开发者: @colinodell
原作者: @nickcernis
为什么将 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 转换表单以进行尝试。
转换选项
注意
默认情况下,此库保留没有 Markdown 等价的 HTML 标签,如 <span>
、<div>
、<iframe>
、<script>
等。如果您将解析来自用户的未经验证的输入,请考虑设置以下文档中记录的 strip_tags
和/或 remove_nodes
选项,并使用库(如 HTML Purifier)提供额外的 HTML 过滤。
要删除没有 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"
样式选项
默认情况下,使用星号语法将加粗标签转换为 Markdown,并使用下划线语法将斜体标签转换为 Markdown。可以通过使用 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__"
换行选项
默认情况下,根据传统Markdown的规则,br
标签会被转换成两个空格后跟一个换行符。要将hard_break
设置为true
以省略两个空格,请按照GitHub Flavored Markdown (GFM)的规则操作。
$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://thephpleague.com](https://thephpleague.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语法的组成部分,因此默认情况下不启用对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。
样式说明
-
Setext(下划线)标题是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)上出现的"致命错误:未找到类'DOMDocument'"等错误可以通过安装php-xml来解决。
贡献者
非常感谢迄今为止的所有贡献者。欢迎提出进一步改进和功能建议。
工作原理
HTML To Markdown从提供的HTML创建一个DOMDocument,遍历树,并将每个节点转换为包含等效Markdown的文本节点,从最深层嵌套的节点开始,向根节点工作。
待办事项
- 支持嵌套列表和块引用内的列表。
- 提供一项选项以保留包含Markdown无法表示的属性的标签作为HTML(例如
style
)。
尝试将Markdown转换为HTML?
使用以下这些优秀的库之一
关于Elvish没有保证。