Biblioteca que converte HTML em Markdown para sua sanidade e conveniência.
Requer : PHP 7.2+
Desenvolvedor líder : @colinodell
Autor original : @nickcernis
“Que alquimia é essa?” você murmura. "Posso ver por que você converteria Markdown em HTML", você continua, já elaborando um pouco a questão, "mas por que seguir o outro caminho?"
Normalmente você converteria HTML em Markdown se:
Exija a biblioteca emitindo este comando:
composer require league/html-to-markdown
Adicionar require 'vendor/autoload.php';
para o topo do seu script.
Em seguida, crie uma nova instância HtmlConverter, passando seu código HTML válido para sua função convert()
:
use League HTMLToMarkdown HtmlConverter ;
$ converter = new HtmlConverter ();
$ html = " <h3>Quick, to the Batpoles!</h3> " ;
$ markdown = $ converter -> convert ( $ html );
A variável $markdown
agora contém a versão Markdown do seu HTML como uma string:
echo $ markdown ; / / == > ### Quick, to the Batpoles!
O diretório demo
incluído contém um formulário de conversão HTML-> Markdown para experimentar.
Cuidado
Por padrão, esta biblioteca preserva tags HTML sem equivalentes Markdown, como <span>
, <div>
, <iframe>
, <script>
, etc. Se você estiver analisando entradas não confiáveis de usuários, considere definir strip_tags
e/ou remove_nodes
opções documentadas abaixo e também usando uma biblioteca (como HTML Purifier) para fornecer filtragem HTML adicional.
Para remover tags HTML que não possuem um equivalente Markdown e preservar o conteúdo dentro delas, defina strip_tags
como true, assim:
$ converter = new HtmlConverter ( array ( ' strip_tags ' => true ));
$ html = ' <span>Turnips!</span> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!"
Ou mais explicitamente, assim:
$ converter = new HtmlConverter ();
$ converter -> getConfig ()-> setOption ( ' strip_tags ' , true );
$ html = ' <span>Turnips!</span> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!"
Observe que apenas as tags em si são removidas, e não o conteúdo que elas contêm.
Para remover tags e seu conteúdo, passe uma lista de tags separadas por espaços em remove_nodes
, assim:
$ converter = new HtmlConverter ( array ( ' remove_nodes ' => ' span div ' ));
$ html = ' <span>Turnips!</span><div>Monkeys!</div> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains ""
Por padrão, todos os comentários são retirados do conteúdo. Para preservá-los, use a opção preserve_comments
, assim:
$ converter = new HtmlConverter ( array ( ' preserve_comments ' => true ));
$ html = ' <span>Turnips!</span><!-- Monkeys! --> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!<!-- Monkeys! -->"
Para preservar apenas comentários específicos, defina preserve_comments
com um array de strings, como este:
$ converter = new HtmlConverter ( array ( ' preserve_comments ' => array ( ' Eggs! ' )));
$ html = ' <span>Turnips!</span><!-- Monkeys! --><!-- Eggs! --> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Turnips!<!-- Eggs! -->"
Por padrão, os links de espaço reservado são preservados. Para remover os links do espaço reservado, use a opção strip_placeholder_links
, assim:
$ converter = new HtmlConverter ( array ( ' strip_placeholder_links ' => true ));
$ html = ' <a>Github</a> ' ;
$ markdown = $ converter -> convert ( $ html ); / / $ markdown now contains "Github"
Por padrão, as tags em negrito são convertidas usando a sintaxe de asterisco e as tags em itálico são convertidas usando a sintaxe sublinhada. Altere-os usando as opções bold_style
e 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__"
Por padrão, as tags br
são convertidas em dois espaços seguidos por um caractere de nova linha conforme o Markdown tradicional. Defina hard_break
como true
para omitir os dois espaços, conforme 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"
Por padrão, a
tags são convertidas para a sintaxe de link mais fácil possível, ou seja, se nenhum texto ou título estiver disponível, então a sintaxe <url>
será usada em vez da sintaxe [url](url)
completa. Defina use_autolinks
como false
para alterar esse comportamento para sempre usar a sintaxe completa do link.
$ 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)"
Você pode passar o objeto Environment
atual para personalizar, ou seja, quais conversores devem ser usados.
$ 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="" />"
O suporte para tabelas Markdown não está habilitado por padrão porque não faz parte da sintaxe original do Markdown. Para usar tabelas adicione o conversor explicitamente:
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 );
Cabeçalhos Setext (sublinhados) são o padrão para H1 e H2. Se você preferir o estilo ATX para H1 e H2 (# Header 1 e ## Header 2), defina header_style
como 'atx' no array de opções ao instanciar o objeto:
$converter = new HtmlConverter(array('header_style'=>'atx'));
Cabeçalhos de prioridade H3 e inferiores sempre usam o estilo atx.
Links e imagens são referenciados in-line. As referências de notas de rodapé (onde os atributos image src e âncora href estão listados nas notas de rodapé) não são usadas.
Blockquotes não são quebras de linha – isso torna o Markdown convertido mais fácil de editar.
HTML To Markdown requer extensões xml, lib-xml e dom do PHP, todas habilitadas por padrão na maioria das distribuições.
Erros como "Erro fatal: Classe 'DOMDocument' não encontrada" em distribuições como CentOS que desativam a extensão xml do PHP podem ser resolvidos instalando o php-xml.
Muito obrigado a todos os colaboradores até agora. Outras melhorias e sugestões de recursos são muito bem-vindas.
HTML To Markdown cria um DOMDocument a partir do HTML fornecido, percorre a árvore e converte cada nó em um nó de texto contendo o markdown equivalente, começando do nó aninhado mais profundamente e trabalhando em direção ao nó raiz.
style
).Use uma destas ótimas bibliotecas:
Não há garantias sobre os élficos, no entanto.