Bibliothèque qui convertit le HTML en Markdown pour votre santé mentale et votre commodité.
Nécessite : PHP 7.2+
Développeur principal : @colinodell
Auteur original : @nickcernis
« De quelle alchimie s'agit-il ? tu murmures. "Je comprends pourquoi vous convertiriez Markdown en HTML", continuez-vous, en travaillant déjà un peu sur la question, "mais pourquoi aller dans l'autre sens ?"
En règle générale, vous convertissez du HTML en Markdown si :
Exigez la bibliothèque en exécutant cette commande :
composer require league/html-to-markdown
Ajoutez require 'vendor/autoload.php';
en haut de votre script.
Ensuite, créez une nouvelle instance de HtmlConverter, en transmettant votre code HTML valide à sa fonction convert()
:
use League HTMLToMarkdown HtmlConverter ;
$ converter = new HtmlConverter ();
$ html = " <h3>Quick, to the Batpoles!</h3> " ;
$ markdown = $ converter -> convert ( $ html );
La variable $markdown
contient désormais la version Markdown de votre HTML sous forme de chaîne :
echo $ markdown ; / / == > ### Quick, to the Batpoles!
Le répertoire demo
inclus contient un formulaire de conversion HTML-> Markdown à essayer.
Prudence
Par défaut, cette bibliothèque conserve les balises HTML sans équivalents Markdown, comme <span>
, <div>
, <iframe>
, <script>
, etc. Si vous analysez les entrées non fiables des utilisateurs, veuillez envisager de définir les strip_tags
et/ou remove_nodes
options documentées ci-dessous, et également en utilisant une bibliothèque (comme HTML Purifier) pour fournir un filtrage HTML supplémentaire.
Pour supprimer les balises HTML qui n'ont pas d'équivalent Markdown tout en préservant le contenu qu'elles contiennent, définissez strip_tags
sur true, comme ceci :
$ converter = new HtmlConverter ( array ( ' strip_tags ' => true ));
$ html = ' <span>Turnips!</span> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!"
Ou plus explicitement, comme ceci :
$ converter = new HtmlConverter ();
$ converter -> getConfig ()-> setOption ( ' strip_tags ' , true );
$ html = ' <span>Turnips!</span> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!"
Notez que seules les balises elles-mêmes sont supprimées, pas le contenu qu'elles contiennent.
Pour supprimer les balises et leur contenu, transmettez une liste de balises séparées par des espaces dans remove_nodes
, comme ceci :
$ converter = new HtmlConverter ( array ( ' remove_nodes ' => ' span div ' ));
$ html = ' <span>Turnips!</span><div>Monkeys!</div> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains ""
Par défaut, tous les commentaires sont supprimés du contenu. Pour les conserver, utilisez l'option preserve_comments
, comme ceci :
$ converter = new HtmlConverter ( array ( ' preserve_comments ' => true ));
$ html = ' <span>Turnips!</span><!-- Monkeys! --> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!<!-- Monkeys! -->"
Pour conserver uniquement des commentaires spécifiques, définissez preserve_comments
avec un tableau de chaînes, comme ceci :
$ converter = new HtmlConverter ( array ( ' preserve_comments ' => array ( ' Eggs! ' )));
$ html = ' <span>Turnips!</span><!-- Monkeys! --><!-- Eggs! --> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!<!-- Eggs! -->"
Par défaut, les liens d'espace réservé sont conservés. Pour supprimer les liens d'espace réservé, utilisez l'option strip_placeholder_links
, comme ceci :
$ converter = new HtmlConverter ( array ( ' strip_placeholder_links ' => true ));
$ html = ' <a>Github</a> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Github"
Par défaut, les balises grasses sont converties à l'aide de la syntaxe astérisque et les balises italiques sont converties à l'aide de la syntaxe soulignée. Modifiez-les en utilisant les options bold_style
et 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__"
Par défaut, les balises br
sont converties en deux espaces suivis d'un caractère de nouvelle ligne selon le Markdown traditionnel. Définissez hard_break
sur true
pour omettre les deux espaces, conformément à 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 n line break"
$ converter -> getConfig ()-> setOption ( ' hard_break ' , false ); / / default
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "test n line break"
Par défaut, a
balises sont converties selon la syntaxe de lien la plus simple possible, c'est-à-dire que si aucun texte ou titre n'est disponible, alors la syntaxe <url>
sera utilisée plutôt que la syntaxe complète [url](url)
. Définissez use_autolinks
sur false
pour modifier ce comportement afin de toujours utiliser la syntaxe complète du lien.
$ 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)"
Vous pouvez transmettre l'objet Environment
actuel pour personnaliser, c'est-à-dire quels convertisseurs doivent être utilisés.
$ 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="" />"
La prise en charge des tableaux Markdown n'est pas activée par défaut car elle ne fait pas partie de la syntaxe Markdown d'origine. Pour utiliser des tableaux, ajoutez explicitement le convertisseur :
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 );
Les en-têtes Setext (soulignés) sont la valeur par défaut pour H1 et H2. Si vous préférez le style ATX pour H1 et H2 (# Header 1 et ## Header 2), définissez header_style
sur 'atx' dans le tableau d'options lorsque vous instanciez l'objet :
$converter = new HtmlConverter(array('header_style'=>'atx'));
Les en-têtes de priorité H3 et inférieure utilisent toujours le style atx.
Les liens et les images sont référencés en ligne. Les références aux notes de bas de page (où les attributs image src et Anchor href sont répertoriés dans les notes de bas de page) ne sont pas utilisées.
Les blockquotes ne sont pas renvoyés à la ligne – cela rend le Markdown converti plus facile à modifier.
HTML To Markdown nécessite les extensions XML, lib-xml et dom de PHP, qui sont toutes activées par défaut sur la plupart des distributions.
Des erreurs telles que « Erreur fatale : Classe 'DOMDocument' introuvable » sur des distributions telles que CentOS qui désactivent l'extension XML de PHP peuvent être résolues en installant php-xml.
Un grand merci à tous les contributeurs jusqu'à présent. D'autres améliorations et suggestions de fonctionnalités sont les bienvenues.
HTML To Markdown crée un DOMDocument à partir du HTML fourni, parcourt l'arborescence et convertit chaque nœud en un nœud de texte contenant le markdown équivalent, en commençant par le nœud le plus profondément imbriqué et en progressant vers le nœud racine.
style
).Utilisez l'une de ces superbes bibliothèques :
Aucune garantie concernant les Elfiques, cependant.