安全性と利便性のために HTML を Markdown に変換するライブラリ。
必要条件: PHP 7.2+
リード開発者: @colinodell
元の著者: @nickcernis
「これはどんな錬金術ですか?」あなたはつぶやきます。 「Markdown を HTML に変換する理由はわかります。でも、なぜ他の方法を選択するのでしょうか?」とあなたはすでにいくらか質問を続けながら続けます。
通常、次の場合に HTML を 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 変換フォームが含まれています。
注意
デフォルトでは、このライブラリは、 <span>
、 <div>
、 <iframe>
、 <script>
などの Markdown に相当するものを含まない HTML タグを保持します。ユーザーからの信頼できない入力を解析する場合は、 strip_tags
および/またはremove_nodes
の設定を検討してください。以下に記載されているオプションを使用し、追加の HTML フィルタリングを提供するライブラリ (HTML Purifier など) も使用します。
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 に従って、2 つのスペースとそれに続く改行文字に変換されます。 GitHub Flavored Markdown (GFM) に従って、 hard_break
true
に設定して 2 つのスペースを省略します。
$ converter = new HtmlConverter ();
$ html = ' <p>test<br>line break</p> ' ;
$ converter -> getConfig ()-> setOption ( ' hard_break ' , true );
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "test n line break"
$ converter -> getConfig ()-> setOption ( ' hard_break ' , false ); / / default
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "test n line 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 構文の一部ではないため、デフォルトでは有効になっていません。テーブルを使用するには、コンバータを明示的に追加します。
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 );
Settext (下線付き) ヘッダーは、H1 および H2 のデフォルトです。 H1 および H2 (#ヘッダー 1 および ## ヘッダー 2) に ATX スタイルを使用する場合は、オブジェクトをインスタンス化するときに、オプション配列でheader_style
'atx' に設定します。
$converter = new HtmlConverter(array('header_style'=>'atx'));
H3 優先度以下のヘッダーは常に atx スタイルを使用します。
リンクと画像はインラインで参照されます。脚注参照 (画像の src 属性とアンカー href 属性が脚注にリストされている場合) は使用されません。
ブロック引用符は行折り返されません。これにより、変換されたマークダウンが編集しやすくなります。
HTML To Markdown には、PHP の xml、lib-xml、および dom 拡張機能が必要です。これらはすべて、ほとんどのディストリビューションでデフォルトで有効になっています。
CentOS などの PHP の xml 拡張機能を無効にするディストリビューションでの「致命的エラー: クラス 'DOMDocument' が見つかりません」などのエラーは、php-xml をインストールすることで解決できます。
これまでのすべての貢献者に感謝します。さらなる改善や機能の提案は大歓迎です。
HTML To Markdown は、指定された HTML から DOMDocument を作成し、ツリーをたどって、最も深くネストされたノードから開始してルート ノードに向かって内側に向かって各ノードを同等のマークダウンを含むテキスト ノードに変換します。
style
) がタグに含まれている場合、タグを HTML として保存するオプションを提供します。次の優れたライブラリのいずれかを使用してください。
ただし、エルフについては何の保証もありません。