Εργαλείο Κωδικοποίησης και Αποκωδικοποίησης URL
Πληκτρολόγησε ή επικόλλησε κείμενο, επίλεξε Κωδικοποίηση ή Αποκωδικοποίηση, μετά Στοιχείο ή Πλήρες URL — το αποτέλεσμα ενημερώνεται άμεσα και δεν φεύγει ποτέ από τον browser σου.
Στοιχείο: κάνει escape στα & = ? / και άλλους δεσμευμένους χαρακτήρες — χρησιμοποίησέ το για μία τιμή που θα εισαχθεί σε URL.
Στοιχείο έναντι Πλήρους URL: δύο διαφορετικές δουλειές
Και οι δύο λειτουργίες μετατρέπουν μη ασφαλείς χαρακτήρες σε
ποσοστιαία κωδικοποιημένα bytes της μορφής %XX,
αλλά διαφωνούν ως προς το ποιοι χαρακτήρες θεωρούνται "μη
ασφαλείς" — και αυτή η διαφωνία είναι ακριβώς το ζητούμενο. Η
λειτουργία Στοιχείο χρησιμοποιεί τις encodeURIComponent/decodeURIComponent
του browser, που κάνουν escape σε οτιδήποτε δεν είναι απλό
γράμμα, ψηφίο ή ένα μικρό σύνολο ασφαλών σημείων στίξης —
συμπεριλαμβανομένων δομικών χαρακτήρων URL όπως &, =, ? και /. Αυτό είναι σωστό όταν το κείμενό σου πρόκειται
να γίνει μία μόνο τιμή μέσα σε ένα URL που κατασκευάζει
κάποιο άλλο κομμάτι του συστήματος — έναν όρο αναζήτησης, έναν
προορισμό ανακατεύθυνσης, ένα κομμάτι JSON μέσα σε μια
συμβολοσειρά ερωτήματος — επειδή αυτοί οι δομικοί χαρακτήρες
πρέπει να εξουδετερωθούν ώστε να μην περάσουν για σύνταξη URL.
Η λειτουργία Πλήρες URL χρησιμοποιεί τις encodeURI/decodeURI, που αναγνωρίζουν
ότι τα & = ? / : @ # και παρόμοια είναι
ακριβώς αυτά που κάνουν ένα URL να είναι URL, και τα αφήνουν ως
έχουν — κάνει escape μόνο σε χαρακτήρες που είναι πραγματικά μη
έγκυροι μέσα σε URL, όπως κενά διαστήματα ή ακατέργαστο Unicode.
Αυτό είναι σωστό όταν το κείμενό σου είναι ήδη ένας πλήρης
σύνδεσμος και απλώς θέλεις να είναι έγκυρος.
Πρακτικό παράδειγμα
Η κωδικοποίηση του https://example.com/search?q=a&b δίνει δύο
διαφορετικά, εξίσου σωστά αποτελέσματα ανάλογα με τη λειτουργία:
-
Στοιχείο →
https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Da%26b— κάθε δομικός χαρακτήρας κωδικοποιείται. Επικόλλησέ το μέσα σε άλλο URL ως μία τιμή ερωτήματος (π.χ.?redirect=https%3A%2F%2F...) και θα παραμείνει ανέπαφο· επικόλλησέ το ως έχει στη γραμμή διευθύνσεων και είναι απλώς μια χαλασμένη, δυσανάγνωστη συμβολοσειρά. -
Πλήρες URL →
https://example.com/search?q=a&b— εντελώς αναλλοίωτο, επειδή κάθε χαρακτήρας που υπάρχει είναι ήδη έγκυρος μέσα σε ένα URI. Η λειτουργία Πλήρες URL ενεργοποιείται μόνο όταν υπάρχει κάτι πραγματικά μη έγκυρο προς κωδικοποίηση, όπως ένα κενό: η κωδικοποίηση του?q=hello worldδίνει?q=hello%20worldκαι στις δύο λειτουργίες, αφού ένα ακατέργαστο κενό διάστημα δεν είναι ποτέ έγκυρο σε καμία από τις δύο.
Το λάθος που πρέπει να αποφύγεις: να περάσεις έναν ολόκληρο
σύνδεσμο μέσα από τη λειτουργία Στοιχείο. Θα κωδικοποιήσει
πρόθυμα το :// και κάθε &,
μετατρέποντας έναν σύνδεσμο που δούλευε σε μια συμβολοσειρά που
δεν λειτουργεί πια καθόλου ως URL — ακριβώς γι' αυτό υπάρχει η
λειτουργία Πλήρες URL.
Συχνές ερωτήσεις
Πότε πρέπει να χρησιμοποιώ τη λειτουργία Στοιχείο αντί για Πλήρες URL;
Χρησιμοποίησε τη λειτουργία Στοιχείο όταν το κείμενο που κωδικοποιείς θα γίνει ΕΝΑ ΚΟΜΜΑΤΙ ενός URL — η τιμή μιας παραμέτρου ερωτήματος, ένα τμήμα διαδρομής — που στη συνέχεια θα εισαχθεί μέσα σε ένα μεγαλύτερο URL. Κάνει escape σε κάθε χαρακτήρα με ειδική σημασία σε ένα URL (συμπεριλαμβανομένων των /, ?, & και =), ώστε μια τιμή όπως "a&b=c" να μην μπορεί να χαλάσει κατά λάθος τη δομή του URL στο οποίο εισάγεται. Χρησιμοποίησε τη λειτουργία Πλήρες URL όταν το κείμενο είναι ήδη ένας πλήρης, αυτόνομος σύνδεσμος και απλώς θέλεις να βεβαιωθείς ότι είναι έγκυρος — για παράδειγμα πριν τον εμφανίσεις, τον αποθηκεύσεις ή τον περάσεις σε μια συνάρτηση που περιμένει πραγματικό URL. Αφήνει ανέγγιχτους δομικούς χαρακτήρες όπως :, /, ?, & και =, ακριβώς επειδή αυτοί κάνουν τον σύνδεσμο να λειτουργεί.
Γιατί η αποκωδικοποίηση δείχνει μερικές φορές σφάλμα αντί για αποτέλεσμα;
Η ποσοστιαία κωδικοποίηση ακολουθεί αυστηρή μορφή: ένα % πρέπει πάντα να ακολουθείται από ακριβώς δύο δεκαεξαδικά ψηφία (όπως %20 ή %3F). Αν το κείμενο που αποκωδικοποιείς έχει ένα μεμονωμένο % που δεν ακολουθείται από δύο έγκυρα δεκαεξαδικά ψηφία — συχνά λόγω διπλής κωδικοποίησης που πήγε στραβά, ημιτελούς αντιγραφής-επικόλλησης, ή κειμένου που δεν είχε ποτέ κωδικοποιηθεί — η συνάρτηση decodeURIComponent ή decodeURI του browser πετάει ένα URIError αντί να μαντέψει. Αυτό το εργαλείο πιάνει το σφάλμα και δείχνει ένα κατανοητό μήνυμα αντί για κενό αποτέλεσμα ή σφάλμα στην κονσόλα.
Αν αποκωδικοποιήσω σε λειτουργία Πλήρες URL, τα %26 και %3D θα γίνονται πάντα & και =;
Όχι απαραίτητα, και αυτό γίνεται επίτηδες. Το βήμα αποκωδικοποίησης της λειτουργίας Πλήρες URL αφήνει σκόπιμα ανέγγιχτη την κωδικοποιημένη μορφή των δομικών χαρακτήρων (;, /, ?, :, @, &, =, +, $, #), επειδή η αποκωδικοποίησή τους θα μπορούσε να αλλάξει το νόημα του URL — μετατρέποντας π.χ. μία παράμετρο ερωτήματος σε κάτι που μοιάζει με δύο. Η λειτουργία Στοιχείο δεν έχει τέτοιον περιορισμό και μετατρέπει κάθε έγκυρη κωδικοποιημένη ακολουθία πίσω στον χαρακτήρα της, δομικό ή όχι, κάτι που είναι σωστό όταν αποκωδικοποιείς μία μεμονωμένη τιμή και όχι έναν ολόκληρο σύνδεσμο.
Η ποσοστιαία κωδικοποίηση είναι το ίδιο πράγμα με το Base64;
Όχι — λύνουν διαφορετικά προβλήματα. Η ποσοστιαία κωδικοποίηση (αυτό που κάνει αυτό το εργαλείο) κάνει escape μόνο στους συγκεκριμένους χαρακτήρες που είναι μη ασφαλείς ή έχουν σημασία μέσα σε ένα URL, αφήνοντας ανέγγιχτα τα συνηθισμένα γράμματα και ψηφία, οπότε το αποτέλεσμα παραμένει σε μεγάλο βαθμό ευανάγνωστο. Το Base64 μετατρέπει κάθε byte της εισόδου σε ένα εντελώς διαφορετικό αλφάβητο, παράγοντας αποτέλεσμα που δεν μοιάζει καθόλου με το αρχικό — χρήσιμο για την ενσωμάτωση αυθαίρετων δυαδικών δεδομένων σε μορφές κειμένου, αλλά υπερβολικό (και λάθος) για την τιμή μιας παραμέτρου ερωτήματος σε URL.