Κωδικοποίηση και αποκωδικοποίηση URL
Μετατρέψτε κείμενο ώστε να μπαίνει με ασφάλεια σε ένα URL ή επαναφέρετε ακολουθίες τύπου %20 σε αναγνώσιμους χαρακτήρες. Το εργαλείο χρησιμοποιεί τις ενσωματωμένες συναρτήσεις encodeURIComponent, encodeURI και decodeURIComponent του προγράμματος περιήγησής σας, εμφανίζει τις παραμέτρους του query σε πίνακα και δεν στέλνει τίποτα σε διακομιστή.
0 χαρακτήρες · 0 λέξεις · 0 γραμμές
0 χαρακτήρες · 0 λέξεις · 0 γραμμές
Εκτελείται εξ ολοκλήρου σε αυτήν την καρτέλα του προγράμματος περιήγησης. Το κείμενό σας δεν ανεβαίνει ούτε αποθηκεύεται πουθενά.
Τι κάνει escape κάθε συνάρτηση
Υπολογίστηκε με τις ίδιες τις συναρτήσεις του προγράμματος περιήγησης. Η encodeURIComponent αφήνει αμετάβλητα τα γράμματα, τα ψηφία και αυτά τα σύμβολα: ! ' ( ) * - . _ ~
| Χαρακτήρας | encodeURIComponent | encodeURI |
|---|---|---|
(κενό) | %20 | %20 |
! | ! | ! |
" | %22 | %22 |
# | %23 | # |
$ | %24 | $ |
% | %25 | %25 |
& | %26 | & |
' | ' | ' |
( | ( | ( |
) | ) | ) |
* | * | * |
+ | %2B | + |
, | %2C | , |
/ | %2F | / |
: | %3A | : |
; | %3B | ; |
= | %3D | = |
? | %3F | ? |
@ | %40 | @ |
[ | %5B | %5B |
] | %5D | %5D |
{ | %7B | %7B |
} | %7D | %7D |
| | %7C | %7C |
\ | %5C | %5C |
^ | %5E | %5E |
` | %60 | %60 |
< | %3C | %3C |
> | %3E | %3E |
~ | ~ | ~ |
- | - | - |
_ | _ | _ |
. | . | . |
é | %C3%A9 | %C3%A9 |
€ | %E2%82%AC | %E2%82%AC |
😀 | %F0%9F%98%80 | %F0%9F%98%80 |
Κωδικοποίηση με ποσοστό (percent-encoding) και οι δεσμευμένοι χαρακτήρες του RFC 3986
Μια διεύθυνση URL μπορεί να περιέχει μόνο ένα περιορισμένο σύνολο χαρακτήρων ASCII. Το RFC 3986, η προδιαγραφή του 2005 για τη σύνταξη των URI, τους χωρίζει σε δύο ομάδες. Οι μη δεσμευμένοι χαρακτήρες, A–Z, a–z, 0–9 και τα τέσσερα σύμβολα - . _ ~, δεν χρειάζονται ποτέ κωδικοποίηση. Οι δεσμευμένοι χαρακτήρες έχουν συγκεκριμένο ρόλο: οι γενικοί οριοθέτες : / ? # [ ] @ χωρίζουν το σχήμα, τον κεντρικό υπολογιστή, τη διαδρομή, το ερώτημα και το τμήμα (fragment), ενώ οι υποοριοθέτες ! $ & ' ( ) * + , ; = χωρίζουν στοιχεία μέσα σε αυτά, όπως κάνουν τα & και = σε ένα query string. Όλοι οι υπόλοιποι χαρακτήρες, καθώς και κάθε δεσμευμένος χαρακτήρας που χρησιμοποιείται ως απλά δεδομένα, πρέπει να κωδικοποιούνται με ποσοστό (percent-encoding).
Η κωδικοποίηση με ποσοστό γράφει ένα byte ως % ακολουθούμενο από δύο δεκαεξαδικά ψηφία. Το κείμενο μετατρέπεται πρώτα σε UTF-8, οπότε ένα κενό γίνεται %20, ένα é (δύο byte) γίνεται %C3%A9 και ένα emoji γίνεται τέσσερις ομάδες %XX. Γι' αυτό μια αναζήτηση για "café & bar" καταλήγει σε έναν σύνδεσμο ως caf%C3%A9%20%26%20bar: το & κωδικοποιείται ώστε ο διακομιστής να μην το διαβάσει ως αρχή νέας παραμέτρου.
encodeURIComponent, encodeURI και αποκωδικοποίηση
Το encodeURIComponent είναι η σωστή επιλογή για ένα μεμονωμένο τμήμα, όπως μια τιμή ερωτήματος, ένα τμήμα διαδρομής ή ένα URL ανακατεύθυνσης που περνά ως παράμετρος. Κωδικοποιεί τα πάντα εκτός από τους μη δεσμευμένους χαρακτήρες και τους ! ' ( ) *, που η JavaScript αφήνει ανέγγιχτους για ιστορικούς λόγους. Το encodeURI (ολόκληρο URL) υποθέτει ότι η είσοδος είναι ήδη πλήρης διεύθυνση και διατηρεί άθικτους τους δεσμευμένους χαρακτήρες, οπότε στο https://example.com/a b?q=1 κωδικοποιείται μόνο το κενό. Η χρήση του encodeURI σε τιμή παραμέτρου είναι κλασικό σφάλμα: ένα & ή # μέσα στην τιμή θα επιβιώσει και θα χαλάσει το URL.
Η Αποκωδικοποίηση αναιρεί οποιαδήποτε από τις δύο συναρτήσεις. Οι φόρμες HTML που υποβάλλονται με GET χρησιμοποιούν την παλαιότερη μορφή application/x-www-form-urlencoded, στην οποία το κενό γράφεται ως + αντί για %20. Αφήστε επιλεγμένο το Αντιμετώπιση του + ως κενού για αυτές και απενεργοποιήστε το όταν έχει σημασία ένα κυριολεκτικό σύμβολο συν, όπως σε έναν αριθμό τηλεφώνου. Αν η είσοδος περιέχει % που δεν ακολουθείται από δύο δεκαεξαδικά ψηφία, ή byte που δεν είναι έγκυρο UTF-8, η αποκωδικοποίηση αποτυγχάνει με σαφές μήνυμα αντί να μαντέψει. Όταν το κείμενο περιέχει query string, οι παράμετροί του εμφανίζονται αποκωδικοποιημένες σε πίνακα κάτω από το εργαλείο. Για δυαδικά δεδομένα σε URL, το Base64url είναι η συνήθης εναλλακτική.
Συχνές ερωτήσεις
- Το κενό σε ένα URL γράφεται ως %20 ή ως σύμβολο συν;
- Στις διαδρομές και σύμφωνα με το RFC 3986, το κενό είναι %20. Η μορφή + σημαίνει κενό μόνο μέσα σε query strings που κωδικοποιούνται όπως τις κωδικοποιούν οι φόρμες HTML, οπότε το %20 είναι η ασφαλής επιλογή παντού.
- Γιατί εμφανίστηκε %2520 στο URL μου;
- Κωδικοποιήθηκε δύο φορές. Στην πρώτη διέλευση το κενό έγινε %20 και στη δεύτερη κωδικοποιήθηκε και το ίδιο το %, ως %25. Αποκωδικοποιήστε μία φορά για να αναιρέσετε το επιπλέον επίπεδο και κωδικοποιείτε τις τιμές μόνο σε ένα σημείο του κώδικά σας.
- Ποιοι χαρακτήρες δεν χρειάζονται ποτέ κωδικοποίηση με ποσοστό;
- Το σύνολο των μη δεσμευμένων χαρακτήρων του RFC 3986: τα γράμματα A έως Z σε κεφαλαία και πεζά, τα ψηφία 0 έως 9, καθώς και η παύλα, η τελεία, η κάτω παύλα και το περισπωμένο (tilde).
- Μπορεί ένα URL να περιέχει μη λατινικούς χαρακτήρες, π.χ. ελληνικά, χωρίς κωδικοποίηση;
- Οι περιηγητές τους εμφανίζουν, αλλά κατά τη μετάδοση κάθε χαρακτήρας εκτός ASCII σε διαδρομή ή ερώτημα αποστέλλεται ως UTF-8 με κωδικοποίηση ποσοστού. Τα ονόματα τομέα χρησιμοποιούν ξεχωριστό σύστημα, το Punycode, που τα μετατρέπει σε ετικέτες xn--.
- Γιατί η αποκωδικοποίηση αναφέρει μη έγκυρη ακολουθία;
- Το κείμενο περιέχει ένα % που δεν ακολουθείται από δύο δεκαεξαδικά ψηφία, όπως ένα κυριολεκτικό "100%", ή τα byte αποκωδικοποιούνται σε μη έγκυρο UTF-8. Κωδικοποιήστε τα αδέσποτα % ως %25 πριν από την αποκωδικοποίηση.