ไลบรารี่ที่แปลง HTML เป็น Markdown เพื่อความมีสติและความสะดวกของคุณ
ต้องการ : PHP 7.2+
หัวหน้านักพัฒนา : @colinodel
ผู้เขียนต้นฉบับ : @nickcernis
“นี่คือการเล่นแร่แปรธาตุอะไร?” คุณพึมพำ "ฉันเห็นได้ว่าทำไมคุณถึงแปลง Markdown เป็น HTML" คุณพูดต่อโดยพยายามถามคำถามอยู่บ้าง "แต่ทำไมถึงเป็นอย่างอื่น"
โดยทั่วไปคุณจะแปลง HTML เป็น Markdown หาก:
ต้องการไลบรารีโดยการออกคำสั่งนี้:
composer require league/html-to-markdown
เพิ่ม require 'vendor/autoload.php';
ไปที่ด้านบนของสคริปต์ของคุณ
จากนั้น สร้างอินสแตนซ์ HtmlConverter ใหม่ โดยส่งโค้ด HTML ที่ถูกต้องของคุณไปยังฟังก์ชัน convert()
use League HTMLToMarkdown HtmlConverter ;
$ converter = new HtmlConverter ();
$ html = " <h3>Quick, to the Batpoles!</h3> " ;
$ markdown = $ converter -> convert ( $ html );
ตัวแปร $markdown
ขณะนี้มีเวอร์ชัน Markdown ของ HTML ของคุณเป็นสตริง:
echo $ markdown ; / / == > ### Quick, to the Batpoles!
ไดเร็กทอรี demo
ที่รวมไว้มีแบบฟอร์มการแปลง HTML->Markdown เพื่อทดลองใช้
คำเตือน
ตามค่าเริ่มต้น ไลบรารีนี้จะเก็บแท็ก HTML ไว้โดยไม่เทียบเท่ากับ Markdown เช่น <span>
, <div>
, <iframe>
, <script>
ฯลฯ หากคุณจะแยกวิเคราะห์อินพุตที่ไม่น่าเชื่อถือจากผู้ใช้ โปรดพิจารณาตั้ง strip_tags
และ/หรือ remove_nodes
ตัวเลือก ที่บันทึกไว้ด้านล่าง และยังใช้ไลบรารี (เช่น โปรแกรมฟอก HTML) เพื่อให้การกรอง HTML เพิ่มเติม
หากต้องการตัดแท็ก HTML ที่ไม่มี Markdown เทียบเท่าในขณะที่ยังคงรักษาเนื้อหาที่อยู่ภายใน ให้ตั้งค่า 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 แบบดั้งเดิม ตั้งค่า hard_break
เป็น true
เพื่อละเว้นช่องว่างทั้งสอง ตาม GitHub Flavoured 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"
ตามค่าเริ่มต้น 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 หากคุณต้องการสไตล์ ATX สำหรับ H1 และ H2 (# Header 1 และ ## Header 2) ให้ตั้ง header_style
เป็น 'atx' ในอาร์เรย์ตัวเลือกเมื่อคุณสร้างอินสแตนซ์ของออบเจ็กต์:
$converter = new HtmlConverter(array('header_style'=>'atx'));
ส่วนหัวของลำดับความสำคัญ H3 และต่ำกว่าจะใช้รูปแบบ atx เสมอ
ลิงค์และรูปภาพมีการอ้างอิงแบบอินไลน์ การอ้างอิงเชิงอรรถ (โดยที่แอตทริบิวต์ src และจุดยึด href ของรูปภาพแสดงอยู่ในเชิงอรรถ) จะไม่ถูกนำมาใช้
Blockquotes ไม่มีการพันบรรทัด – ทำให้ Markdown ที่แปลงแล้วแก้ไขได้ง่ายขึ้น
HTML To Markdown ต้องใช้ส่วนขยาย xml, lib-xml และ dom ของ PHP ซึ่งทั้งหมดนี้เปิดใช้งานตามค่าเริ่มต้นในการแจกแจงส่วนใหญ่
ข้อผิดพลาดเช่น "ข้อผิดพลาดร้ายแรง: ไม่พบคลาส 'DOMDocument'" ในการกระจายเช่น CentOS ที่ปิดใช้งานส่วนขยาย xml ของ PHP สามารถแก้ไขได้โดยการติดตั้ง php-xml
ขอบคุณมากสำหรับผู้มีส่วนร่วมทุกคนจนถึงตอนนี้ การปรับปรุงเพิ่มเติมและข้อเสนอแนะคุณสมบัติยินดีอย่างยิ่ง
HTML To Markdown จะสร้าง DOMDocument จาก HTML ที่ให้มา เดินผ่านแผนผัง และแปลงแต่ละโหนดเป็นโหนดข้อความที่มีมาร์กดาวน์ที่เทียบเท่า เริ่มต้นจากโหนดที่ซ้อนกันลึกที่สุดและทำงานเข้าด้านในไปยังโหนดรูท
style
)ใช้หนึ่งในไลบรารีที่ยอดเยี่ยมเหล่านี้:
แม้ว่าจะไม่มีการรับประกันเกี่ยวกับพวกเอลฟ์ก็ตาม