Bibliothek, die HTML für Ihre Vernunft und Bequemlichkeit in Markdown konvertiert.
Erfordert : PHP 7.2+
Hauptentwickler : @colinodell
Ursprünglicher Autor : @nickcernis
„Welche Alchemie ist das?“ du murmelst. „Ich kann verstehen, warum Sie Markdown in HTML konvertieren würden“, fahren Sie fort und beschäftigen sich bereits ein wenig mit der Frage, „aber warum sollten Sie den anderen Weg gehen?“
Normalerweise würden Sie HTML in Markdown konvertieren, wenn:
Fordern Sie die Bibliothek an, indem Sie diesen Befehl ausgeben:
composer require league/html-to-markdown
Fügen Sie require 'vendor/autoload.php';
an den Anfang Ihres Skripts.
Erstellen Sie als Nächstes eine neue HtmlConverter-Instanz und übergeben Sie Ihren gültigen HTML-Code an die Funktion convert()
:
use League HTMLToMarkdown HtmlConverter ;
$ converter = new HtmlConverter ();
$ html = " <h3>Quick, to the Batpoles!</h3> " ;
$ markdown = $ converter -> convert ( $ html );
Die Variable $markdown
enthält jetzt die Markdown-Version Ihres HTML als String:
echo $ markdown ; / / == > ### Quick, to the Batpoles!
Das mitgelieferte demo
Verzeichnis enthält ein HTML->Markdown-Konvertierungsformular zum Ausprobieren.
Vorsicht
Standardmäßig behält diese Bibliothek HTML-Tags ohne Markdown-Äquivalente bei, wie <span>
, <div>
, <iframe>
, <script>
usw. Wenn Sie nicht vertrauenswürdige Eingaben von Benutzern analysieren, sollten Sie erwägen, die strip_tags
und/oder remove_nodes
festzulegen Optionen, die unten dokumentiert sind, und auch die Verwendung einer Bibliothek (wie HTML Purifier), um zusätzliche HTML-Filterung bereitzustellen.
Um HTML-Tags zu entfernen, die kein Markdown-Äquivalent haben, während der darin enthaltene Inhalt erhalten bleibt, setzen Sie strip_tags
wie folgt auf „true“:
$ converter = new HtmlConverter ( array ( ' strip_tags ' => true ));
$ html = ' <span>Turnips!</span> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!"
Oder expliziter so:
$ converter = new HtmlConverter ();
$ converter -> getConfig ()-> setOption ( ' strip_tags ' , true );
$ html = ' <span>Turnips!</span> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!"
Beachten Sie, dass nur die Tags selbst entfernt werden, nicht der Inhalt, den sie enthalten.
Um Tags und ihren Inhalt zu entfernen, übergeben Sie eine durch Leerzeichen getrennte Liste von Tags in remove_nodes
wie folgt:
$ converter = new HtmlConverter ( array ( ' remove_nodes ' => ' span div ' ));
$ html = ' <span>Turnips!</span><div>Monkeys!</div> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains ""
Standardmäßig werden alle Kommentare aus dem Inhalt entfernt. Um sie beizubehalten, verwenden Sie die Option preserve_comments
wie folgt:
$ converter = new HtmlConverter ( array ( ' preserve_comments ' => true ));
$ html = ' <span>Turnips!</span><!-- Monkeys! --> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!<!-- Monkeys! -->"
Um nur bestimmte Kommentare beizubehalten, legen Sie preserve_comments
mit einem Array von Zeichenfolgen fest, etwa so:
$ converter = new HtmlConverter ( array ( ' preserve_comments ' => array ( ' Eggs! ' )));
$ html = ' <span>Turnips!</span><!-- Monkeys! --><!-- Eggs! --> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!<!-- Eggs! -->"
Platzhalterlinks bleiben standardmäßig erhalten. Um die Platzhalterlinks zu entfernen, verwenden Sie die Option strip_placeholder_links
wie folgt:
$ converter = new HtmlConverter ( array ( ' strip_placeholder_links ' => true ));
$ html = ' <a>Github</a> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Github"
Standardmäßig werden fett gedruckte Tags mit der Sternchen-Syntax und kursive Tags mit der unterstrichenen Syntax konvertiert. Ändern Sie diese mithilfe der Optionen bold_style
und 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__"
Standardmäßig werden br
-Tags gemäß herkömmlichem Markdown in zwei Leerzeichen gefolgt von einem Zeilenumbruchzeichen umgewandelt. Setzen Sie hard_break
auf true
, um die beiden Leerzeichen gemäß GitHub Flavored Markdown (GFM) wegzulassen.
$ 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"
Standardmäßig werden a
in die einfachste mögliche Link-Syntax konvertiert, d. h. wenn kein Text oder Titel verfügbar ist, wird die <url>
-Syntax anstelle der vollständigen [url](url)
-Syntax verwendet. Setzen Sie use_autolinks
auf false
um dieses Verhalten so zu ändern, dass immer die vollständige Link-Syntax verwendet wird.
$ 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)"
Sie können das aktuelle Environment
übergeben, um es anzupassen, z. B. welche Konverter verwendet werden sollen.
$ 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="" />"
Die Unterstützung für Markdown-Tabellen ist standardmäßig nicht aktiviert, da sie nicht Teil der ursprünglichen Markdown-Syntax ist. Um Tabellen zu verwenden, fügen Sie den Konverter explizit hinzu:
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 );
Setext-Überschriften (unterstrichen) sind die Standardeinstellung für H1 und H2. Wenn Sie den ATX-Stil für H1 und H2 (#Header 1 und ## Header 2) bevorzugen, setzen Sie header_style
im Optionsarray auf „atx“, wenn Sie das Objekt instanziieren:
$converter = new HtmlConverter(array('header_style'=>'atx'));
Header mit H3-Priorität und niedriger verwenden immer den ATX-Stil.
Links und Bilder werden inline referenziert. Fußnotenverweise (wobei die Attribute „image src“ und „anker href“ in den Fußnoten aufgeführt sind) werden nicht verwendet.
Blockzitate werden nicht in Zeilen umgebrochen – das erleichtert die Bearbeitung des konvertierten Markdowns.
Für HTML To Markdown sind die XML-, lib-xml- und dom-Erweiterungen von PHP erforderlich, die bei den meisten Distributionen standardmäßig aktiviert sind.
Fehler wie „Schwerwiegender Fehler: Klasse ‚DOMDocument‘ nicht gefunden“ auf Distributionen wie CentOS, die die XML-Erweiterung von PHP deaktivieren, können durch die Installation von php-xml behoben werden.
Vielen Dank an alle bisherigen Mitwirkenden. Weitere Verbesserungen und Funktionsvorschläge sind sehr willkommen.
HTML To Markdown erstellt ein DOM-Dokument aus dem bereitgestellten HTML, durchläuft den Baum und konvertiert jeden Knoten in einen Textknoten, der den entsprechenden Markdown enthält, beginnend beim am tiefsten verschachtelten Knoten und nach innen in Richtung Wurzelknoten.
style
).Nutzen Sie eine dieser tollen Bibliotheken:
Allerdings gibt es keine Garantien für die Elben.