Επιθεωρητής κωδικοποίησης ποσοστού

Η κωδικοποίηση ποσοστού δεν είναι ένας κανόνας αλλά πολλοί, και διαφωνούν σε μια ντουζίνα περίπου χαρακτήρες. Η σελίδα περνά το ίδιο κείμενο από τις encodeURIComponent, encodeURI και τη σειριοποίηση application/x-www-form-urlencoded δίπλα-δίπλα, σημειώνει τους χαρακτήρες όπου διαφωνούν, εκτυπώνει μία γραμμή ανά χαρακτήρα με τα bytes UTF-8 και την κλάση RFC 3986 του, και λέει πόσες φορές έχει κωδικοποιηθεί μια συμβολοσειρά. Η πλευρά της αποκωδικοποίησης διαβάζει μια συμβολοσειρά με αυστηρό ή χαλαρό κανόνα και αναφέρει ποια διαφυγή είναι χαλασμένη και πού, αντί να επιστρέφει σιωπηλά λανθασμένο αποτέλεσμα.
Όλη η επεξεργασία γίνεται τοπικά στο πρόγραμμα περιήγησης — τα δεδομένα δεν ανεβαίνουν ποτέ σε κανέναν διακομιστή.

Δεν είναι σαφές τι είναι η κωδικοποίηση ποσοστού; Η κωδικοποίηση ποσοστού εξηγείται με απλά λόγια — τι είναι, γιατί ένα κενό γίνεται %20 ή +, και τι σημαίνει όταν ένα URL εμφανίζει %25.
Τι κάνει αυτό:
Πώς διαβάζονται οι διαφυγές:
encodeURIComponent
encodeURI
form (application/x-www-form-urlencoded)
Το Ctrl+Enter στην είσοδο εκτελεί την ενεργή λειτουργία.
Επιλογή λειτουργίας και πάτημα του κουμπιού της. Η Κωδικοποίηση & επιθεώρηση δείχνει τις τρεις κωδικοποιήσεις του κειμένου και μία γραμμή ανά χαρακτήρα· η Αποκωδικοποίηση διαβάζει τις διαφυγές πίσω και καταμετρά τα στρώματα. Το Αυτοτέστ επανεκτελεί κάθε τεκμηριωμένο δείγμα, κάθε εκτυπώσιμο χαρακτήρα ASCII και τις αλυσίδες στρωμάτων που καταγράφονται στο αρχείο δεδομένων της σελίδας, και αναφέρει το πλήθος εδώ.
Πού διαφωνούν οι κωδικοποιητές:μόνο οι χαρακτήρες που ακολουθούν αντιμετωπίζονται διαφορετικά και από τις τρεις μεθόδους. Όλα τα υπόλοιπα περνούν και από τις τρεις αναλλοίωτα, ή διαφεύγουν πανομοιότυπα και από τις τρεις.
Κάθε χαρακτήρας, μία γραμμή για κάθε έναν:τα bytes UTF-8 στα οποία μετατρέπεται ένας χαρακτήρας, η κλάση στην οποία τον τοποθετεί το RFC 3986, και η διαφυγή που γράφει κάθε περιβάλλον. Οι τέσσερις στήλες περιβάλλοντος είναι τα σύνολα κωδικοποίησης ποσοστού του WHATWG URL, που χρησιμοποιεί ένα πρόγραμμα περιήγησης όταν χτίζει διαδρομή, ερώτημα ή τμήμα· μια σκιασμένη γραμμή είναι χαρακτήρας που τον αντιμετωπίζουν διαφορετικά οι τρεις κωδικοποιητές.
Το ακριβές σύνολο που διαφεύγει αυτή η σελίδα για κάθε μέρος ενός URL:εκτυπώνεται από τον ίδιο τον κωδικοποιητή, οπότε αυτός ο πίνακας και ο κώδικας που συμπληρώνει τις στήλες παραπάνω δεν μπορούν να αποκλίνουν. Κάθε σύνολο διαφεύγει επίσης τους χαρακτήρες ελέγχου C0 (U+0000 έως U+001F) και κάθε σημείο κώδικα πάνω από το U+007E, γι' αυτό το κείμενο εκτός ASCII διαφεύγει πάντα σε κάθε περιβάλλον.
Αυτά τα σύνολα προέρχονται από τα σύνολα κωδικοποίησης ποσοστού του WHATWG και διαφέρουν από αυτά σε δύο σκόπιμα σημεία, που και τα δύο κάνουν ασφαλή τη συναρμολόγηση με το χέρι: ένα # διαφεύγει μέσα σε ερώτημα, γιατί ένα ακατέργαστο θα ξεκινούσε το τμήμα· και το σύνολο του στοιχείου είναι καρφιτσωμένο ακριβώς στους χαρακτήρες που διαφεύγει το encodeURIComponent, συμπεριλαμβανομένης της απόστροφου, ενώ το σύνολο φόρμας είναι καρφιτσωμένο σε ό,τι διαφεύγει το URLSearchParams. Οι δύο στήλες στον πίνακα παραπάνω είναι επομένως η ίδια η συμπεριφορά της πλατφόρμας και όχι αναπαραγωγή της. Η λίστα αυτή εξηγεί επίσης ένα αποτέλεσμα που ξαφνιάζει: ένα σύμβολο ποσοστού διαφεύγεται από το encodeURIComponent και από το encodeURI, αλλά δεν ανήκει σε κανένα από τα σύνολα περιβάλλοντος του WHATWG, οπότε οι στήλες διαδρομής, ερωτήματος και τμήματος του πίνακα ανά χαρακτήρα το αφήνουν ως έχει. Ένα ακατέργαστο σύμβολο ποσοστού σε URL που συναρμολογήθηκε με το χέρι εξακολουθεί να είναι κίνδυνος, γιατί το πρότυπο περιμένει η είσοδος να έχει επικυρωθεί πρώτα: το %41 μέσα σε ερώτημα είναι ένα A για αρκετά πλαίσια διακομιστή, και η αυστηρή ανάγνωση της σελίδας αντιμετωπίζει ένα μόνο % ως χαλασμένη διαφυγή. Η ρητή διαφυγή του ως %25 είναι η ασφαλέστερη συνήθεια, και ο πίνακας ανά χαρακτήρα δείχνει και τις δύο γραφές δίπλα-δίπλα.
Πόσες φορές έχει κωδικοποιηθεί αυτή η συμβολοσειρά:κάθε γύρος αποκωδικοποίησης είναι ένα στρώμα. Μια τιμή που έχει κωδικοποιηθεί δύο φορές αρχίζει με%25όπου μια μεμονωμένη κωδικοποίηση θα άφηνε%20, και μια τιμή που έχει κωδικοποιηθεί τρεις φορές αρχίζει με%2525.
Οι χαρακτήρες που μπορεί να μεταφέρει ένα URL όπως είναι:Το RFC 3986 χωρίζει το εύρος ASCII σε τρεις ομάδες, και οι κανόνες διαφυγής έχουν νόημα μόνο απέναντι σε αυτόν τον διαχωρισμό.
Οι δεσμευμένοι χαρακτήρες δεν είναι απαγορευμένοι, είναι κρατημένοι: έχουν σημασία για τον αναλυτή URL. Ο κανόνας που προκύπτει από τη λίστα είναι σύντομος — αν ένας χαρακτήρας είναι δεσμευμένος και προορίζεται ως δεδομένα, κωδικοποιείται· αν είναι μη δεσμευμένος, δεν χρειάζεται ποτέ διαφυγή.
Οι τρεις μέθοδοι, και τι αφήνει ως έχει η καθεμία:
Οι λίστες είναι τα ακριβή σύνολα που αφήνει ανοιχτά κάθε μέθοδος στο εύρος ASCII· το Αυτοτέστ ελέγχει κάθε εκτυπώσιμο χαρακτήρα ASCII έναντι αυτών, οπότε ο πίνακας δεν μπορεί να αποκλίνει από τους κωδικοποιητές που περιγράφει.
Πόσο μεγάλη είναι η είσοδος που δέχεται αυτή η σελίδα, και γιατί:Η κωδικοποίηση ποσοστού είναι ένα μόνο πέρασμα πάνω στο κείμενο, οπότε σε αντίθεση με τους μετατροπείς βάσης αριθμών αυτού του ιστοτόπου το κόστος αυξάνεται γραμμικά και όχι τετραγωνικά: δεν υπάρχει μήκος στο οποίο η ίδια η αριθμητική γίνεται το πρόβλημα. Τα παρακάτω όρια υπάρχουν επειδή ο πίνακας ανά χαρακτήρα σχεδιάζεται στο έγγραφο, και ένας πίνακας με ένα εκατομμύριο γραμμές είναι αυτό που πραγματικά σταματά έναν περιηγητή.
Τι είναι η κωδικοποίηση ποσοστού;

Η κωδικοποίηση ποσοστού — που λέγεται επίσης κωδικοποίηση URL, και σε παλαιότερα κείμενα διαφυγή — είναι ο κανόνας που επιτρέπει σε ένα URL να μεταφέρει χαρακτήρες που δεν επιτρέπεται να περιέχει. Μια διαφυγή ποσοστού είναι τρεις χαρακτήρες ASCII: ένα σύμβολο ποσοστού και δύο δεκαεξαδικά ψηφία, που αντιπροσωπεύουν ένα byte. Το %20 είναι το byte 0x20, δηλαδή κενό. Το %2F είναι το byte 0x2F, δηλαδή κάθετος. Τίποτα άλλο δεν εμπλέκεται: η διαφυγή ονομάζει ένα byte, όχι έναν χαρακτήρα.

Επειδή ονομάζει bytes, το κείμενο πρέπει πρώτα να μετατραπεί σε bytes, και η κωδικοποίηση bytes είναι UTF-8. Από εδώ προέρχονται οι μακριές διαφυγές: ένας κινέζικος χαρακτήρας είναι τρία bytes UTF-8 και άρα τρεις διαφυγές, και ένα emoji είναι τέσσερα bytes και δώδεκα χαρακτήρες ASCII.

Η εκδοχή των 30 δευτερολέπτων: ένα κενό είναι %20 ως τιμή URL, αλλά + στα δεδομένα φόρμας· το # είναι %23· ένα κυριολεκτικό σύμβολο ποσοστού είναι %25. Οι τρεις κωδικοποιητές της σελίδας συμφωνούν για τα γράμματα, τα ψηφία και τα -_., και διαφωνούν σε μια ντουζίνα περίπου σημεία στίξης, μεταξύ των οποίων και η κυματιστή — γι' αυτό ακριβώς το encodeURIComponent και το encodeURI παράγουν διαφορετικές συμβολοσειρές για το ίδιο κείμενο, και γι' αυτό η λάθος από τις δύο μπορεί να χωρίσει μια τιμή σε δύο παραμέτρους ερωτήματος.
Γιατί ένα URL το χρειάζεται καθόλου

Ένα URI ορίζεται ως ακολουθία χαρακτήρων ASCII (RFC 3986 ενότητα 2.1), και μέσα σε αυτό το εύρος ASCII ορισμένοι χαρακτήρες είναι δεσμευμένοι: είναι τα σημεία στίξης που δίνουν στο URL τη δομή του. Η άνω και κάτω τελεία με δύο καθέτους χωρίζουν το σχήμα, το σύμβολο @ χωρίζει τις πληροφορίες χρήστη από τον κεντρικό υπολογιστή, το ερωτηματικό ξεκινά το ερώτημα, το # ξεκινά το τμήμα, το & χωρίζει παραμέτρους ερωτήματος, και το σύμβολο ποσοστού εισάγει διαφυγή.

Αυτό δημιουργεί ένα πρόβλημα και μια τρύπα. Το πρόβλημα: μια τιμή που περιέχει έναν από αυτούς τους χαρακτήρες — ένα πλαίσιο αναζήτησης με «a&b», ένα όνομα αρχείου με κάθετο, ένας κωδικός με άνω και κάτω τελεία — θα άλλαζε αλλιώς τη δομή του URL στο οποίο ταξιδεύει. Η τρύπα: το ίδιο το σύμβολο ποσοστού, οπότε ο κωδικοποιητής μπορεί απλώς να επεκτείνει το δικό του αλφάβητο. Το % γράφεται ως %25, και τα δύο δεκαεξαδικά ψηφία που ακολουθούν είναι συνηθισμένοι μη δεσμευμένοι χαρακτήρες.

Παραδείγματα βήμα προς βήμα

Αυτές είναι οι ακριβείς εξόδοι των τριών κωδικοποιητών που εκτελεί αυτή η σελίδα, σε είσοδο που επιλέχθηκε επειδή συμπεριφέρεται διαφορετικά ο ένας από τον άλλο. Η σελίδα τις επανυπολογίζει μπροστά στον χρήστη, και το Αυτοτέστ της ελέγχει κάθε γραμμή έναντι των ίδιων των υλοποιήσεων της πλατφόρμας.

Οι τρεις μέθοδοι, και πότε είναι σωστή η καθεμία

Η σύντομη εκδοχή που γλιτώνει τα περισσότερα σφάλματα: οτιδήποτε μπαίνει σε μία μεμονωμένη τιμή παραμέτρου περνά από το encodeURIComponent (ή από σειριοποιητή φόρμας, που κάνει την ίδια δουλειά με διαφορετικό ασφαλές σύνολο), και ένα πλήρες URL που είναι ήδη συναρμολογημένο περνά από το encodeURI αν χρειάζεται διαφυγή καθόλου. Η επιλογή λάθος από τα δύο είναι το πιο συνηθισμένο λάθος κωδικοποίησης ποσοστού στον κώδικα ιστού.

Οι χαρακτήρες που μπορεί να μεταφέρει ένα URL, πλήρως
Δύο σύμβολα συν, δύο σημασίες

Το κενό είναι ο μόνος χαρακτήρας του οποίου η κωδικοποίηση εξαρτάται από το πού πηγαίνει το κείμενο, και το σύμβολο συν είναι ο λόγος.

Η παγίδα βρίσκεται στο μέσο αυτού του πίνακα. Στα δεδομένα φόρμας ένα σύμβολο συν σημαίνει κενό, οπότε μια τιμή που πραγματικά περιέχει σύμβολο συν — αριθμός τηλεφώνου γραμμένος ως +44 20 7946 0958, αριθμητική έκφραση, διεύθυνση email με ετικέτα συν — πρέπει να ταξιδέψει ως %2B. Αν ταξιδέψει ως κυριολεκτικό σύμβολο συν, ο παραλήπτης το διαβάζει πίσω ως κενό, και το +44 φτάνει ως " 44".

Κωδικοποιημένο δύο φορές, και πώς αναγνωρίζεται

Διπλή κωδικοποίηση συμβαίνει όταν μια συμβολοσειρά είναι ήδη κωδικοποιημένη και κωδικοποιείται ξανά. Το σύμβολο ποσοστού της πρώτης διαφυγής είναι χαρακτήρας όπως κάθε άλλος, οπότε γίνεται %25, και το στρώμα από κάτω επιβιώνει ως ορατό κείμενο.

Η αναγνώριση είναι θέμα καταμέτρησης: αποκωδικοποιείται η συμβολοσειρά μία φορά και εξετάζεται το αποτέλεσμα. Αν εξακολουθεί να περιέχει διαφυγές που μοιάζουν σκόπιμες — μια έγκυρη %XX ή σύμβολο συν φόρμας εκεί όπου αναμένεται κενό — υπάρχει ακόμη ένα στρώμα. Αν περιέχει %25 ακολουθούμενο από δύο δεκαεξαδικά ψηφία, το επόμενο στρώμα είναι σίγουρα διαφυγή.

Δύο πρακτικές σημειώσεις. Πρώτον, η διπλή αποκωδικοποίηση δεν είναι αβλαβής: είναι γνωστός τρόπος να δει ένα φίλτρο ασφαλείας και ο κώδικας από πίσω διαφορετικές συμβολοσειρές, οπότε ένα φίλτρο που τρέχει πριν από δεύτερη αποκωδικοποίηση φιλτράρει λάθος κείμενο. Δεύτερον, το πλήθος στρωμάτων εδώ είναι ιδιότητα της συμβολοσειράς, όχι υπόσχεση για την πρόθεση: μια νόμιμη τιμή μπορεί να είναι ένα στρώμα βαθιά και μια χαλασμένη να είναι δύο.

Τα λάθη που σχεδιάστηκε αυτή η σελίδα να εντοπίζει
  • Τιμή κωδικοποιημένη με encodeURI. Οι διαχωριστές διατηρούνται, οπότε μια τιμή που περιέχει & ή = χωρίζεται σε πολλές παραμέτρους στην άλλη πλευρά. Η σύγκριση των δύο στηλών στην κορυφή αυτής της σελίδας για την είσοδο a&b=c: η στήλη component διαφεύγει και τους δύο χαρακτήρες, η στήλη encodeURI τους διατηρεί.
  • Ένα κυριολεκτικό σύμβολο συν σταλμένο ως δεδομένα φόρμας. Φτάνει ως κενό. Χρησιμοποιείται το %2B.
  • Τιμή κωδικοποιημένη δύο φορές «για ασφάλεια». Δεν είναι ασφαλέστερη. Ο παραλήπτης αποκωδικοποιεί μία φορά και παίρνει συμβολοσειρά που εξακολουθεί να περιέχει διαφυγές ποσοστού, που είναι η ίδια αστοχία με λάθος σύνολο χαρακτήρων, ένα επίπεδο πιο κάτω.
  • Αποκωδικοποίηση όσων δεν κωδικοποιήθηκαν ποτέ. Ένα κυριολεκτικό σύμβολο ποσοστού μέσα στο κείμενο — 100% sure — δεν είναι διαφυγή. Με αυστηρή ανάγνωση είναι χαλασμένη διαφυγή, στη θέση που αναφέρει αυτή η σελίδα· με χαλαρή ανάγνωση επιβιώνει, και γι' αυτό η χαλαρή είναι η προεπιλογή εδώ και όχι το αντίστροφο.
  • Η παραδοχή ότι η διαφυγή πρέπει να είναι με κεφαλαία. Η αποκωδικοποίηση αντιμετωπίζει το %2f και το %2F ως το ίδιο byte, και τα δύο είναι έγκυρα. Τα κεφαλαία είναι απλώς η κανονική γραφή που συνιστά το RFC 3986, και αυτή που θα παράγουν τα άλλα εργαλεία.
  • Η παραδοχή ότι η κωδικοποίηση ποσοστού κάνει ασφαλές το κείμενο. Το κάνει μονοσήμαντο μέσα σε ένα URL. Δεν σταματά την έγχυση, δεν είναι κρυπτογράφηση και δεν είναι απολυμαντικό: η διαφυγή πρέπει να είναι το τελευταίο βήμα πριν τη συναρμολόγηση, για το περιβάλλον στο οποίο μπαίνει το κείμενο.
Σύντομες απαντήσεις

“Είναι το σύμβολο συν ένα κενό σε URL;”

Μόνο στα δεδομένα φόρμας, και μόνο στο τμήμα του ερωτήματος μιας υποβολής φόρμας. Στη διαδρομή, στο τμήμα και στο ερώτημα ενός απλού συνδέσμου, το σύμβολο συν είναι κυριολεκτικό σύμβολο συν. Γι' αυτό η σελίδα έχει διακόπτη γι' αυτό και δεν μαντεύει.

“Γιατί ο σύνδεσμος εμφανίζει %25;”

Επειδή κάτι κωδικοποίησε σύμβολο ποσοστού. Είτε ένα κυριολεκτικό σύμβολο ποσοστού πέρασε από κωδικοποιητή — το 100% sure γίνεται 100%25%20sure — είτε μια συμβολοσειρά που ήδη περιείχε διαφυγή κωδικοποιήθηκε δεύτερη φορά. Η αποκωδικοποίηση της συμβολοσειράς μία φορά και ο έλεγχος του αποτελέσματος: αν εξακολουθεί να περιέχει %XX, υπάρχει άλλο στρώμα.

“Έχει σημασία αν μια κάθετος μέσα σε τιμή ερωτήματος είναι %2F ή /;”

Στον αναλυτή URL, όχι: και τα δύο φτάνουν στον διακομιστή ως κάθετος, και το σύνολο ερωτήματος του WHATWG αφήνει την κάθετο ως έχει. Ως προς τη διαλειτουργικότητα, μερικές φορές ναι: πολλά πλαίσια διακομιστή εκτελούν δική τους αποκωδικοποίηση πάνω σε ακατέργαστη συμβολοσειρά ερωτήματος, και μερικά διαφωνούν για χαρακτήρες που δεν κωδικοποιήθηκαν ποτέ. Όταν μια τιμή συναρμολογείται με το χέρι αντί με σειριοποιητή, η ρητή διαφυγή των δεσμευμένων χαρακτήρων είναι η ασφαλέστερη συνήθεια.

“Γιατί η στήλη φόρμας κωδικοποιεί μια κυματιστή που οι άλλες δύο αφήνουν ως έχει;”

Επειδή το ασφαλές σύνολο του κωδικοποιητή φόρμας είναι στενότερο: μόνο γράμματα, ψηφία και -_.*. Ο κωδικοποιητής φόρμας του WHATWG διαφεύγει τα ~ ! ' ( ), παρότι το RFC 3986 θεωρεί το ~ μη δεσμευμένο. Και οι δύο γραφές αποκωδικοποιούνται στην ίδια τιμή· η διαφορά έχει σημασία μόνο όταν συγκρίνονται συμβολοσειρές byte προς byte.

“Μπορούν οι ίδιοι χαρακτήρες να εμφανιστούν χωρίς διαφυγή στη γραμμή διευθύνσεων του προγράμματος περιήγησης;”

Ναι, και αυτό είναι η γραμμή διευθύνσεων, όχι το URL. Τα προγράμματα περιήγησης εμφανίζουν μια αναγνώσιμη μορφή ενός URL και το κωδικοποιούν όταν το στέλνουν, οπότε το 中文 σε σύνδεσμο γίνεται %E4%B8%AD%E6%96%87 στο καλώδιο. Αν αντιγραφεί το URL από τη γραμμή διευθύνσεων, μπορεί να προκύψει οποιαδήποτε από τις δύο μορφές, ανάλογα με το πρόγραμμα περιήγησης.

“Κάθε διαφυγή εδώ φαίνεται έγκυρη, αλλά ο χαρακτήρας που βγαίνει δεν είναι αυτός που περίμενα. Γιατί;”

Πίσω από το «αποκωδικοποιήθηκε λάθος» κρύβονται δύο διαφορετικές αστοχίες, και η σελίδα τις αναφέρει διαφορετικά. Η πρώτη είναι χαλασμένη διαφυγή: σύμβολο ποσοστού που δεν ακολουθείται από δύο δεκαεξαδικά ψηφία, όπως ένα τελικό 100% ή ένα %zz. Είναι πρόβλημα σύνταξης, και η αυστηρή ανάγνωση την απορρίπτει και λέει πού βρίσκεται, ενώ η χαλαρή την κρατά ως κυριολεκτικό κείμενο και την καταγράφει. Η δεύτερη είναι διαφυγή της οποίας το byte είναι απολύτως νόμιμο αλλά τα bytes της δεν συνθέτουν έγκυρο χαρακτήρα UTF-8, όπως το %FF μόνο του ή ένας τριών bytes χαρακτήρας κομμένος ως %E4%B8. Δεν είναι πρόβλημα σύνταξης, οπότε και οι δύο ανάγνωσεις επιστρέφουν το κείμενο, αντικαθιστούν τα bytes που δεν αποκωδικοποιούνται με τον χαρακτήρα αντικατάστασης U+FFFD ("�") και καταγράφουν προειδοποίηση που το λέει. Αυτή η προειδοποίηση είναι το χρήσιμο μέρος: κείμενο που φτάνει ως χαρακτήρες αντικατάστασης συνήθως σημαίνει ότι ο αποστολέας χρησιμοποίησε άλλο σύνολο χαρακτήρων, ή ότι η συμβολοσειρά κωδικοποιήθηκε μία φορά παραπάνω. Η κωδικοποίηση ποσοστού ονομάζει bytes, και αυτή η σελίδα, όπως και το πρότυπο URL, τα διαβάζει πάντα ως UTF-8.

“Τι δεν κάνει αυτή η σελίδα;”

Δεν διαχωρίζει ένα URL σε σχήμα, κεντρικό υπολογιστή, διαδρομή και ερώτημα — γι' αυτό υπάρχει ο Αναλυτής URL. Δεν ελέγχει αν ένας σύνδεσμος είναι ασφαλής για άνοιγμα, δεν επικοινωνεί με τίποτα, και δεν μαντεύει το σύνολο χαρακτήρων των bytes πίσω από μια διαφυγή: τα διαβάζει πάντα ως UTF-8, όπως απαιτεί το πρότυπο URL.

“Ποια εναλλακτική λύση χρειάζεται η αποκωδικοποίηση, και πώς ξέρω ότι είναι σωστή;”

Το Αυτοτέστ συγκρίνει τους κωδικοποιητές της σελίδας με τα encodeURIComponent, encodeURI και URLSearchParams της πλατφόρμας για κάθε εκτυπώσιμο χαρακτήρα ASCII, επαναλαμβάνει κάθε παράδειγμα των παραπάνω πινάκων, ελέγχει ξανά τις καταγεγραμμένες αλυσίδες στρωμάτων και αναφέρει εδώ το πλήθος των ελέγχων.

Πρότυπα και εμβέλεια

Η κωδικοποίηση ποσοστού ορίζεται στο RFC 3986 ενότητα 2.1, με τον ορισμό των δεσμευμένων και μη δεσμευμένων χαρακτήρων στις ενότητες 2.2 και 2.3 και τον κανόνα πεζών/κεφαλαίων στην ενότητα 6.2.2.1. Τα σύνολα που χρησιμοποιεί πραγματικά ένα πρόγραμμα περιήγησης όταν χτίζει ένα URL βρίσκονται στο πρότυπο URL του WHATWG, που τα χωρίζει ανά περιβάλλον: ένα σύνολο για το τμήμα, ένα για το ερώτημα, ένα για το ειδικό ερώτημα, ένα για τη διαδρομή, ένα για τις πληροφορίες χρήστη, και το στενότερο που χρησιμοποιείται για ένα μεμονωμένο στοιχείο. Η υποβολή φόρμας, μαζί με το σύμβολο συν, βρίσκεται στο HTML Standard υπό το application/x-www-form-urlencoded. Οι δύο συναρτήσεις encodeURI και encodeURIComponent ανήκουν στην ίδια την ECMAScript.

Η σελίδα συμπληρώνει τις στήλες διαδρομής, ερωτήματος και τμήματος από δικά της σύνολα ανά περιβάλλον, και εκτυπώνει τη λίστα για κάθε περιβάλλον δίπλα στο αποτέλεσμα. Τα σύνολα αυτά προέρχονται από αυτά του WHATWG και διαφέρουν από αυτά σε δύο σκόπιμα σημεία: ένα # διαφεύγει μέσα σε ερώτημα, γιατί ένα ακατέργαστο # θα ξεκινούσε το τμήμα, και το σύνολο του στοιχείου είναι καρφιτσωμένο ακριβώς στους χαρακτήρες που διαφεύγει το encodeURIComponent. Όπου μια συνάρτηση της πλατφόρμας είναι ο ορισμός της απάντησης — encodeURIComponent, encodeURI και η σειριοποίηση φόρμας — καλείται απευθείας αυτή η συνάρτηση, οπότε αυτές οι στήλες είναι η πραγματική συμπεριφορά του προγράμματος περιήγησης και όχι αναπαραγωγή της.

Το κείμενο της σελίδας γράφτηκε για αυτόν τον ιστότοπο. Κάθε τιμή στους πίνακες παραπάνω παράγεται από τον δικό της κώδικα της σελίδας κατά τη φόρτωση και ελέγχθηκε έναντι των υλοποιήσεων της πλατφόρμας στα εργαλεία δοκιμών αυτού του ιστοτόπου· το Αυτοτέστ επαναλαμβάνει αυτή τη σύγκριση στο πρόγραμμα περιήγησης.