Μετατροπέας HTML σε Markdown
Επικολλήστε HTML παρακάτω — το καθαρό Markdown εμφανίζεται ακαριαία. Τίποτα από όσα επικολλάτε δεν φεύγει από το πρόγραμμα περιήγησής σας.
Πραγματική ανάλυση DOM, μετά μια απλή διάτρεξη δέντρου
Αυτό το εργαλείο δίνει το HTML σας στον DOMParser
— τον ίδιο αναλυτή που χρησιμοποιεί το πρόγραμμα περιήγησής σας
για κάθε σελίδα που αποδίδει — αντί να προσπαθεί να γράψει με
το χέρι κανονικές εκφράσεις πάνω σε ακατέργαστο κείμενο HTML,
κάτι που είναι ακριβώς το είδος προσέγγισης που καταρρέει μόλις
συναντήσει πραγματικό markup με ασυνήθιστη ένθεση ή ετικέτες
που δεν κλείνουν. Μόλις αποκτήσει ένα σωστό δέντρο DOM, το
διατρέχει ολόκληρο αναδρομικά: οι ετικέτες block όπως
επικεφαλίδες, λίστες και παραθέσεις γίνονται το αντίστοιχό τους
σε Markdown, οι ετικέτες εντός γραμμής όπως έντονα, πλάγια,
σύνδεσμοι και κώδικας γίνονται η αντίστοιχη σύνταξη Markdown
εντός γραμμής, και το απλό κείμενο διατηρείται με τα κενά
συμπτυγμένα όπως θα έκανε ένα πρόγραμμα περιήγησης. Δείτε τις
συχνές ερωτήσεις για να μάθετε ακριβώς ποιες ετικέτες καλύπτονται
και ποιες μένουν σκόπιμα εκτός εύρους.
Πρακτικό παράδειγμα
Είσοδος:
<h2>Λίστα για Ψώνια</h2> <p>Μην ξεχάσετε το <strong>γάλα</strong> και το <em>ψωμί</em>.</p> <ul> <li>Γάλα</li> <li>Ψωμί</li> <li>Αυγά</li> </ul> <blockquote>Ελέγξτε το κουπόνι πριν την πληρωμή.</blockquote>
Έξοδος:
## Λίστα για Ψώνια Μην ξεχάσετε το **γάλα** και το *ψωμί*. - Γάλα - Ψωμί - Αυγά > Ελέγξτε το κουπόνι πριν την πληρωμή.
Συχνές ερωτήσεις
Αυτό το εργαλείο χειρίζεται οποιοδήποτε HTML του δώσετε;
Μετατρέπει ένα τεκμηριωμένο, ειλικρινές υποσύνολο — τις ετικέτες που χρησιμοποιούν πραγματικά οι άνθρωποι για καθημερινό περιεχόμενο: επικεφαλίδες (h1–h6), έντονα (strong/b), πλάγια (em/i), συνδέσμους, εικόνες, λίστες ενός επιπέδου με κουκκίδες και αριθμημένες, παραθέσεις, οριζόντιες γραμμές, παραγράφους και αλλαγές γραμμής, καθώς και ενσωματωμένο κώδικα και μπλοκ κώδικα με οριοθέτες (pre / pre > code). Δεν επιχειρεί να χειριστεί πίνακες, ένθετες λίστες, λίστες ορισμών ή markup διάταξης όπως div και span που χρησιμοποιούνται μόνο για στυλ — αυτά είτε παραλείπονται είτε το κείμενό τους διατρέχεται αναδρομικά χωρίς προσθήκη ειδικής σύνταξης Markdown. Για μια ανάρτηση blog, ένα άρθρο ή ένα απόσπασμα μορφοποιημένου περιεχομένου, αυτό το υποσύνολο καλύπτει τη συντριπτική πλειονότητα του πραγματικού HTML· δεν είναι ένας γενικός μεταγλωττιστής HTML σε Markdown για αυθαίρετες ιστοσελίδες.
Γιατί χρησιμοποιεί τον ενσωματωμένο DOMParser του προγράμματος περιήγησης αντί για χειρόγραφο αναλυτή HTML;
Επειδή η ανάλυση HTML είναι ένα πραγματικά δύσκολο πρόβλημα που έχει ήδη λυθεί σωστά, δωρεάν, από κάθε μηχανή προγράμματος περιήγησης. Το πραγματικό HTML είναι γεμάτο ακραίες περιπτώσεις — ετικέτες που δεν κλείνουν, σιωπηρούς κανόνες κλεισίματος ετικετών, χαρακτηριστικά χωρίς εισαγωγικά, λανθασμένη ένθεση — για τις οποίες η προδιαγραφή HTML ορίζει ακριβή συμπεριφορά ανάκτησης, ακριβώς επειδή οι χειρόγραφοι αναλυτές συνήθως τα χειρίζονται λάθος με ύπουλο τρόπο. Αυτό το εργαλείο αναλύει με new DOMParser().parseFromString(html, "text/html") — την ίδια μηχανή που χρησιμοποιεί το πρόγραμμα περιήγησής σας για να αποδώσει οποιαδήποτε σελίδα επισκέπτεστε — και μετά διατρέχει το προκύπτον, ήδη σωστό, δέντρο DOM. Είναι μια σκόπιμη μηχανική επιλογή: να μην επανεφευρεθεί κάτι που είναι γνωστό ότι είναι εύκολο να γίνει λάθος, όταν μια σωστή υλοποίηση βρίσκεται ήδη μέσα στο ίδιο το πρόγραμμα περιήγησης.
Ανεβαίνει το HTML μου κάπου;
Όχι. Η ανάλυση και ολόκληρη η διάτρεξη του δέντρου γίνονται τοπικά, στο πρόγραμμα περιήγησής σας· τίποτα από όσα επικολλάτε δεν μεταδίδεται ούτε αποθηκεύεται σε διακομιστή. Αυτό ισχύει για κάθε εργαλείο αυτού του ιστότοπου, και εδώ έχει ιδιαίτερη σημασία επειδή το HTML που μετατρέπετε είναι συχνά ένα αδημοσίευτο προσχέδιο ή περιεχόμενο που πήρατε από κάπου που θα προτιμούσατε να μην ξανανεβάσετε.
Τι συμβαίνει με μια ένθετη λίστα, όπως ένα <ul> μέσα σε ένα <li>;
Μένει, με ειλικρίνεια, εκτός του τεκμηριωμένου εύρους αυτού του εργαλείου. Αυτός ο μετατροπέας χειρίζεται αξιόπιστα ένα επίπεδο ένθεσης λιστών — μια απλή ul ή ol με παιδιά li. Μια λίστα ένθετη μέσα σε στοιχείο άλλης λίστας δεν εντοπίζεται ειδικά, οπότε τα στοιχεία της διατρέχονται ως απλό κείμενο αντί να αναπαράγονται ως σωστά στοιχισμένη, ένθετη λίστα Markdown. Αν χρειάζεστε τέλεια μετατροπή ένθετων λιστών, αυτό δεν είναι το κατάλληλο εργαλείο· για τις επίπεδες λίστες ενός επιπέδου που χρησιμοποιεί στην πράξη το περισσότερο καθημερινό περιεχόμενο, μετατρέπει καθαρά.
Διατηρεί ακριβώς τα κενά και τη στοίχιση του HTML μου;
Μόνο εκεί όπου πρέπει. Εκτός από <pre> και τα μπλοκ κώδικα, οι ακολουθίες κενών χαρακτήρων στο κείμενο — επιπλέον κενά, αλλαγές γραμμής από πηγαίο κώδικα μορφοποιημένο για ευανάγνωστη εμφάνιση — συμπτύσσονται σε ένα μόνο κενό, ακριβώς όπως αποδίδει ένα πρόγραμμα περιήγησης το κανονικό κείμενο HTML· αυτό εμποδίζει τη στοίχιση του αρχικού σας HTML να διαρρεύσει στο Markdown ως αδικαιολόγητες αλλαγές γραμμής. Μέσα σε <pre> ή <pre><code>, το αρχικό περιεχόμενο κειμένου διαβάζεται και αναπαράγεται ακριβώς, κενά συμπεριλαμβανομένων, επειδή αυτό ακριβώς είναι το περιεχόμενο που πρέπει να διατηρεί ένα μπλοκ κώδικα με οριοθέτες.