ما هو تحويل HTML إلى Markdown؟
HTML هو الترميز المُصيَّر الذي يعرضه المتصفح — <h1>، <ul>، <table>، <a>، وسواها. Markdown صيغة نصية خفيفة تستخدم رموز ترقيم بسيطة (# للعناوين، * للتوكيد، - لعناصر القوائم) لتمثيل نفس البنية. GitHub Flavored Markdown (GFM) يوسّع مواصفة CommonMark الأصلية بالجداول والشطب وقوائم المهام والروابط التلقائية. تحويل HTML إلى Markdown يسحب HTML المُصيَّر أو المُصدَّر إلى Markdown نصي قابل للتحرير — وهو بالضبط ما تحتاجه هجرة المحتوى من CMS أو تنظيف ملف README.
أي ميزات GitHub Flavored Markdown يدعمها المخرج؟
محرك turndown@7.2.0 المرفق مع امتداد turndown-plugin-gfm يُصدر مجموعة GFM الكاملة من HTML: عناوين بأسلوب ATX من # إلى ###### من <h1>–<h6>، قوائم مرتبة وغير مرتبة قابلة للتداخل، عريض **نص** ومائل *نص*، شطب ~~نص~~ من <del>، روابط ضمنية [نص](url) وصور ، كتل شيفرة محاطة مع وسم لغة (```js)، شيفرة سطرية `code`، جداول pipe من <table>، قوائم مهام GFM - [ ] / - [x] من عناصر checkbox، اقتباسات >، وخطوط أفقية ---. لوحة المعاينة تُعيد تصيير Markdown المُصدَر عبر marked@12.0.2 لتأكيد التحويل بصرياً.
كيف يعمل تحويل HTML إلى Markdown؟
كل تحويل يجري محلياً داخل متصفحك باستخدام ثلاث مكتبات مرفقة — بلا CDN ولا fetch ولا قياسات عن بُعد. الخطوات الرئيسية:
- التعقيم: يمرّ HTML اللصوق أولاً عبر
DOMPurify.sanitize(html, { USE_PROFILES: { html: true } })لتجريد عناصر<script>، وكل معالجي أحداثon*، وعناوينjavascript:قبل أن يمشي أي رمز في الترميز. DOMPurify هو نفس معقم XSS الذي تستخدمه Mozilla MDN و Atlassian و Microsoft 365. - التحويل: يمشي
turndownService.turndownفي DOM المُنظَّف ويُصدر GitHub Flavored Markdown — تصبح العناوين بادئات#، والقوائم عناصر-/1.، و<table>يصبح جدول pipe، وهكذا. يُكتب Markdown في<textarea>للقراءة فقط عبرvalue(لاinnerHTMLأبداً) فهو آمن بطبيعته. - التصيير: يُعاد تحليل Markdown المُصدَر عبر
marked.parse، ويُعقَّم مجدداً بـDOMPurify، ثم يُسنَد إلىinnerHTMLلوحة المعاينة لتحصل على تأكيد بصري بأن Markdown يعود إلى البنية المتوقعة. وضع البث المباشر يؤجّل الإدخال 150 مللي ثانية لتحديث المخرج أثناء اللصق دون إرهاق المحلل.
لماذا تحوّل HTML إلى Markdown بهذه الأداة؟
- الخصوصية: كل عملية تعقيم وتحويل وتصيير تجري داخل متصفحك. لا تصل HTML — بما فيها مقالات المدونات غير المنشورة، ومسوّدات التوثيق الداخلية، ومحتوى README السري — إلى خوادمنا أبداً.
- آمن من XSS افتراضياً: يمرّ HTML اللصوق عبر DOMPurify قبل أن يمشي turndown فيه، ثم تمرّ لوحة المعاينة مجدداً بكل سلسلة HTML عبر DOMPurify قبل
innerHTML، لذا فإن لصق ترميز يحتوي على وسوم<script>أو معالجاتonerror=يُنتج معاينة خاملة و Markdown نظيفاً. - اكتمال GFM: تتحوّل عناصر
<table>إلى جداول pipe في Markdown، و<del>إلى شطب، وقوائم الاختيار إلى قوائم مهام GFM. تُسقط معظم المحولات على الإنترنت الجداول في مسار HTML → Markdown — امتدادturndown-plugin-gfmالمرفق يحافظ عليها.
ما هي التطبيقات الشائعة لتحويل HTML إلى Markdown؟
يظهر تحويل HTML إلى Markdown في هجرة المحتوى والتوثيق والأرشفة:
- هجرة CMS: تصدير منشور WordPress أو Ghost كـ HTML وتحويله إلى Markdown لإعادة بناء موقع ثابت بـ Hugo / Jekyll / 11ty / Astro. يحافظ التحويل على مستويات العناوين والروابط والقوائم والتوكيد الضمني.
- تنظيف README: لصق HTML المُصيَّر لصفحة ويكي أو مقال على الويب واستخراجه إلى Markdown قابل للتحرير لملف README مشروع أو موقع توثيق، بدلاً من إعادة كتابة البنية يدوياً.
- الأرشفة والملاحظات: التقاط بريد إلكتروني HTML أو مقطع ويب وتحويله إلى Markdown للتخزين في Obsidian أو Notion أو قاعدة معرفة نصية عادية — Markdown يبقى ودياً مع الفروق ويصمد أمام تغيرات التنسيق.
كيف يبدو مثال لتحويل HTML إلى Markdown؟
لصق <h2>Heading</h2><ul><li>a</li><li>b<ul><li>nested</li></ul></li></ul> يُنتج Markdown مع ## Heading، وقائمة نقطية متداخلة، ولوحة معاينة تُصيِّر إلى نفس البنية المتداخلة. لصق <table> مع صف رأسي وصفَّي بيانات يُنتج جدول pipe المكافئ | col | col | — مما يؤكد أن التحويل يحافظ على العناوين والقوائم والجداول.
هل يعمل محوّل HTML إلى Markdown هذا داخل متصفحي بالكامل؟
نعم. كل عمليات التعقيم والتحويل والتصيير تجري محلياً كجافاسكربت داخل تبويب متصفحك. المكتبات الثلاث المرفقة — turndown@7.2.0 (مع turndown-plugin-gfm@1.0.2) و marked@12.0.2 و DOMPurify@3.1.7 — تُحمَّل من نفس مصدر الصفحة، فلا اعتماد على CDN ولا fetch ولا XMLHttpRequest ولا navigator.sendBeacon على المدخل. كما تعمل الأداة دون اتصال بمجرد تحميل الصفحة، لأنها حزمة HTML/CSS/JS ثابتة مع المكتبات الموردة بجوارها. المنشورات غير المُصدَرة، والوثائق الداخلية، وملفات README السرية تبقى على جهازك.
هل لوحة المعاينة المُصيَّرة آمنة من XSS؟
نعم. يمرّ HTML اللصوق عبر DOMPurify.sanitize قبل أن يمشي turndown فيه، وكل سلسلة HTML تُسند إلى innerHTML لوحة المعاينة تمرّ أولاً عبر DOMPurify.sanitize(html, { USE_PROFILES: { html: true } }). DOMPurify هو معقم XSS مفتوح المصدر الذي تصونه Cure53؛ هو نفس المكتبة التي تستخدمها Mozilla MDN و Atlassian و Microsoft 365 لتحصين HTML الذي يقدّمه المستخدم. ملف التعريف الافتراضي html يزيل عناصر <script>، وكل سمة معالج حدث on* (onerror، onclick، إلخ)، ومخططات URI من نوع javascript:. لصق <img src=x onerror=alert(1)> يُنتج معاينة يُعيد فيها document.querySelector('#output-preview img[onerror]') القيمة null ولا يُطلق أي تنبيه.
هل تتحوّل جداول GFM من HTML؟
نعم. اتجاه HTML → Markdown يستخدم turndown-plugin-gfm الذي يضيف قاعدة turndown مخصصة تمشي عبر عقد <table> وتُصدر Markdown جدول pipe المكافئ — صف رأسي، وصف محاذاة |---|---|، ثم صفوف بيانات. تُسقط معظم المحولات على الإنترنت الجداول في هذا المسار؛ هذه الأداة تحافظ عليها. الشطب (<del>نص</del> → ~~نص~~) وقوائم المهام (<input type="checkbox"> → - [ ] / - [x]) تتحوّل بالطريقة نفسها.
هل سيتحوّل HTML بشكل نظيف؟
بالنسبة لمجموعة GFM القياسية — العناوين من h1 إلى h6، والقوائم المرتبة وغير المرتبة بالتداخل، والعريض / المائل / الشطب، والروابط الضمنية، والصور الضمنية، وكتل الشيفرة المحاطة مع وسوم اللغة، والشيفرة السطرية، وجداول pipe، وقوائم المهام، والاقتباسات، والخطوط الأفقية، والروابط التلقائية — يكون التحويل نظيفاً ومتوقعاً. الحالات الاستثنائية: تُجرَّد تعليقات HTML (<!-- ... -->) لأن Markdown لا يملك صياغة تعليقات؛ السمات الضمنية وسمات class تُحذف لعدم وجود مكافئ في Markdown؛ والوسوم الضمنية غير الشائعة مثل <sub> / <sup> تتحوّل إلى نص عادي. هذه سلوكيات موثّقة لـ turndown وليست أخطاء.
هل تظليل بناء الجملة في كتل الشيفرة المحاطة مدعوم؟
ليس في الإصدار v1. تُصيَّر كتل الشيفرة المحاطة بخط أحادي المسافة وخلفية خفيفة دون تظليل رموز لكل لغة. إضافة تظليل بناء الجملة ستتطلب تجميع Prism أو highlight.js، يضيف كل منهما 15–40 كيلوبايت إضافة إلى ملف قواعد لكل لغة ومصفوفة سمات تحتاج محاذاة مع لوحة Workshop Terminal. حالياً يُركّز المُصيِّر على الصحة والأمان من XSS؛ وفي حال وجود طلب من المستخدمين على التظليل الضمني، فإن مفتاح تفعيل اختياري متابعة ممكنة.
يأتي محوّل HTML إلى Markdown هذا مرفقاً بـ turndown@7.2.0 (+ turndown-plugin-gfm@1.0.2) و marked@12.0.2 و DOMPurify@3.1.7 على نفس المصدر، يُصدر مجموعة GFM الكاملة، ويعقّم كل سلسلة HTML مُصيَّرة قبل أن تلامس DOM. بلا رفع، بلا CDN، بلا قياسات عن بُعد — كل بايت يبقى داخل متصفحك.