여러분의 온전함과 편의를 위해 HTML을 마크다운으로 변환하는 라이브러리입니다.
요구 사항 : PHP 7.2+
수석 개발자 : @colinodel
원저자 : @nickcernis
"이게 무슨 연금술이에요?" 당신은 중얼거린다. "왜 Markdown을 HTML로 변환하는지 알겠습니다." 이미 질문에 대해 어느 정도 고민하면서 계속합니다. "그런데 왜 다른 방향으로 가는 걸까요?"
일반적으로 다음과 같은 경우 HTML을 Markdown으로 변환합니다.
다음 명령을 실행하여 라이브러리가 필요합니다.
composer require league/html-to-markdown
require 'vendor/autoload.php';
스크립트 상단으로 이동하세요.
다음으로, 유효한 HTML 코드를 해당 convert()
함수에 전달하여 새 HtmlConverter 인스턴스를 만듭니다.
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->마크다운 변환 양식이 포함되어 있습니다.
주의
기본적으로 이 라이브러리는 <span>
, <div>
, <iframe>
, <script>
등과 같은 Markdown에 해당하는 항목 없이 HTML 태그를 유지합니다. 사용자의 신뢰할 수 없는 입력을 구문 분석하려는 경우 strip_tags
및/또는 remove_nodes
설정을 고려하세요. 옵션은 아래에 설명되어 있으며 라이브러리(예: HTML Purifier)를 사용하여 추가 HTML 필터링을 제공합니다.
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에 따라 두 개의 공백과 그 뒤에 개행 문자로 변환됩니다. GitHub Flavored Markdown(GFM)에 따라 두 공백을 생략하려면 hard_break
true
로 설정합니다.
$ 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 );
Setext(밑줄 그어진) 헤더는 H1 및 H2의 기본값입니다. H1 및 H2(# 헤더 1 및 ## 헤더 2)에 대해 ATX 스타일을 선호하는 경우 개체를 인스턴스화할 때 옵션 배열에서 header_style
'atx'로 설정합니다.
$converter = new HtmlConverter(array('header_style'=>'atx'));
H3 우선순위 이하의 헤더는 항상 atx 스타일을 사용합니다.
링크와 이미지는 인라인으로 참조됩니다. 각주 참조(이미지 src 및 앵커 href 속성이 각주에 나열됨)는 사용되지 않습니다.
인용구는 줄바꿈되지 않습니다. 변환된 Markdown을 더 쉽게 편집할 수 있습니다.
HTML To Markdown에는 PHP의 xml, lib-xml 및 dom 확장이 필요하며, 모두 대부분의 배포판에서 기본적으로 활성화되어 있습니다.
PHP의 xml 확장을 비활성화하는 CentOS와 같은 배포판에서 "치명적인 오류: 클래스 'DOMDocument'를 찾을 수 없음"과 같은 오류는 php-xml을 설치하여 해결할 수 있습니다.
지금까지 모든 기여자에게 깊은 감사를 드립니다. 추가적인 개선이나 기능 제안을 환영합니다.
HTML To Markdown은 제공된 HTML에서 DOMDocument를 생성하고, 트리를 탐색하고, 각 노드를 동등한 마크다운이 포함된 텍스트 노드로 변환합니다. 가장 깊게 중첩된 노드에서 시작하여 루트 노드를 향해 안쪽으로 작업합니다.
style
)이 포함된 경우 태그를 HTML로 보존하는 옵션을 제공하세요.다음 훌륭한 라이브러리 중 하나를 사용하십시오.
하지만 Elvish에 대해서는 보장할 수 없습니다.