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.