المكتبة التي تحول HTML إلى Markdown من أجل سلامتك وراحتك.
يتطلب : PHP 7.2+
المطور الرئيسي : @colinodell
المؤلف الأصلي : @niccernis
"ما هذه الخيمياء؟" أنت تمتم. "أستطيع أن أرى لماذا تقوم بتحويل 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 Purifier) لتوفير تصفية إضافية لـ 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 وAnchor href في الحواشي السفلية).
لا يتم تغليف علامات الاقتباس بالأسطر - فهي تجعل تعديل Markdown المحول أسهل.
يتطلب HTML To Markdown ملحقات PHP xml وlib-xml وdom، والتي يتم تمكينها جميعًا افتراضيًا في معظم التوزيعات.
يمكن حل الأخطاء مثل "خطأ فادح: لم يتم العثور على الفئة 'DOMDocument'" في توزيعات مثل CentOS التي تعطل ملحق PHP xml عن طريق تثبيت php-xml.
شكرا جزيلا لجميع المساهمين حتى الآن. مزيد من التحسينات واقتراحات الميزات هي موضع ترحيب كبير.
ينشئ HTML To Markdown مستند DOMDocument من HTML المتوفر، ويتجول عبر الشجرة، ويحول كل عقدة إلى عقدة نصية تحتوي على تخفيض مكافئ، بدءًا من العقدة الأكثر تداخلاً والعمل نحو الداخل نحو العقدة الجذرية.
style
).استخدم إحدى هذه المكتبات الرائعة:
لا توجد ضمانات بشأن الجن، رغم ذلك.