Κωδικοποίηση ποσοστού στα URL: τι σημαίνουν πραγματικά τα %20, + και %2F
Η κωδικοποίηση ποσοστού γράφει έναν χαρακτήρα που ένα URL δεν μπορεί να μεταφέρει με ασφάλεια ως σύμβολο ποσοστού, ακολουθούμενο από την τιμή του byte σε δεκαεξαδικό. Ένα κενό γίνεται %20, ένα και εμπορικό γίνεται %26 και μια κάθετος γίνεται %2F. Η κωδικοποίηση προστατεύει τη δομή ενός συνδέσμου, επειδή χαρακτήρες όπως το & και το = χωρίζουν τα μέρη μιας συμβολοσειράς ερωτήματος.
Ποιοι χαρακτήρες μπορούν να μείνουν ως έχουν
Το πρότυπο URI (RFC 3986), πάνω στο οποίο στηρίζονται τα URL, αφήνει ανέγγιχτους ορισμένους χαρακτήρες: τα λατινικά γράμματα A έως Z και a έως z, τα ψηφία και τα τέσσερα σημάδια - _ . ~. Αυτά δεν χρειάζονται ποτέ κωδικοποίηση. Οι άλλοι χαρακτήρες έχουν ρόλο σε ένα URL. Η άνω και κάτω τελεία χωρίζει το σχήμα (https) από το υπόλοιπο, η κάθετος χωρίζει τα τμήματα της διαδρομής, το ερωτηματικό ξεκινά το ερώτημα, το # ξεκινά το θραύσμα, και τα & και = χωρίζουν το ερώτημα σε ονόματα και τιμές. Ένας χαρακτήρας με ρόλο πρέπει να κωδικοποιηθεί όταν τον εννοείς ως δεδομένα και όχι ως δομή.
Γι' αυτό ο ίδιος χαρακτήρας μπορεί να κωδικοποιείται σε ένα σημείο και σε άλλο όχι. Σε μια τιμή ερωτήματος, το και εμπορικό πρέπει να είναι %26, αλλιώς ο σύνδεσμος σπάει σε λάθος σημείο. Στη διαδρομή ενός συνδέσμου είναι απλώς ένας χαρακτήρας.
Μη αγγλικά γράμματα
Τα γράμματα εκτός του βασικού λατινικού αλφαβήτου κωδικοποιούνται ως τα byte τους σε UTF-8, και κάθε byte γράφεται ως κωδικός ποσοστού. Το é της λέξης café αντιστοιχεί στα δύο byte C3 και A9, άρα γίνεται %C3%A9, και ολόκληρη η λέξη γίνεται caf%C3%A9.
Ένα απλό παράδειγμα κάνει τους κανόνες συγκεκριμένους. Το κείμενο a b&c=d/é, κωδικοποιημένο ως στοιχείο, γίνεται a%20b%26c%3Dd%2F%C3%A9. Κάθε χαρακτήρας που δεν είναι ασφαλές γράμμα, ψηφίο ή σημάδι κωδικοποιείται: το κενό, το και εμπορικό, το ίσον, η κάθετος και το γράμμα με τόνο.
Στοιχείο ή ολόκληρο URL
Υπάρχουν δύο είδη κωδικοποίησης, και όχι τυχαία. Η κωδικοποίηση στοιχείου αντιμετωπίζει κάθε δεσμευμένο χαρακτήρα ως δεδομένα. Χρησιμοποίησέ την για μία τιμή, όπως έναν όρο αναζήτησης ή ένα όνομα αρχείου μέσα σε σύνδεσμο. Η κωδικοποίηση του «rock & roll» ως όρου αναζήτησης δίνει rock%20%26%20roll, οπότε το και εμπορικό μένει μέσα στην τιμή.
Η κωδικοποίηση ολόκληρου URL διατηρεί τη δομή. Η κωδικοποίηση του https://example.com/a b δίνει https://example.com/a%20b, με τις καθέτους και την άνω και κάτω τελεία ανέγγιχτες. Χρησιμοποίησέ την για μια πλήρη διεύθυνση που χρειάζεται να γίνει έγκυρη, όχι για μια τιμή που μπαίνει μέσα σε σύνδεσμο.
Το εργαλείο URL έχει τις ρυθμίσεις Στοιχείο και Πλήρες URL για αυτόν ακριβώς τον λόγο. Η αποκωδικοποίηση πλήρους URL διατηρεί επίσης τους κωδικοποιημένους δομικούς χαρακτήρες, όπως το %26 και το %3D, ώστε ο σύνδεσμος να συνεχίζει να λειτουργεί μετά την αποκωδικοποίηση.
Σύμβολα συν και δεδομένα φόρμας
Οι φόρμες ιστού χρησιμοποιούν διαφορετική σύμβαση. Όταν μια φόρμα υποβάλλεται ως δεδομένα φόρμας, το κενό γράφεται ως + και όχι ως %20. Ένα κυριολεκτικό σύμβολο συν γράφεται τότε ως %2B. Έτσι η φράση C++ tips γίνεται C%2B%2B+tips στα δεδομένα φόρμας, και C%2B%2B%20tips σε απλή κωδικοποίηση στοιχείου.
Η αποκωδικοποίηση έχει την ίδια διαφορά. Σε μια συμβολοσειρά ερωτήματος, το + σημαίνει συνήθως κενό. Στη διαδρομή ενός συνδέσμου, το + είναι σύμβολο συν. Το εργαλείο διαβάζει το + ως κενό μόνο όταν είναι επιλεγμένο το Χρήση του + για κενά (δεδομένα φόρμας), γι' αυτό άφησέ το απενεργοποιημένο για διαδρομές και για τιμές όπου το σύμβολο συν είναι πραγματικό.
Διάβασμα μιας μακριάς συμβολοσειράς ερωτήματος
Ένας σύνδεσμος συχνά μεταφέρει τις ρυθμίσεις του μετά το ερωτηματικό. Δες αυτό το παράδειγμα:
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
Αποκωδικοποιημένο, λέει ότι η αναζήτηση είναι για κόκκινη μπλούζα, το μέγεθος είναι M και η ετικέτα είναι summer+sale. Το %2B μένει σύμβολο συν επειδή ήταν κωδικοποιημένο. Επικόλλησε τον σύνδεσμο στο εργαλείο URL και εμφανίζει κάθε όνομα και τιμή μετά την αποκωδικοποίηση, κάτι που κάνει έναν μακρύ σύνδεσμο εύκολο στην ανάγνωση. Αν θέλεις μόνο τη σύντομη διεύθυνση χωρίς ρυθμίσεις παρακολούθησης, κάνε πρώτα καθαρισμό του συνδέσμου.
Διπλή κωδικοποίηση
Το πιο συνηθισμένο λάθος είναι η διπλή κωδικοποίηση μιας τιμής. Αν κωδικοποιήσεις ξανά το κείμενο %20, παίρνεις %2520, επειδή το ίδιο το σύμβολο ποσοστού κωδικοποιείται ως %25. Η σελίδα τότε ψάχνει μια κυριολεκτική %20 στην τιμή, και η αναζήτηση ή η σελίδα δεν ταιριάζει. Αποκωδίκοποίησε τον σύνδεσμο μία φορά, έλεγξε το αποτέλεσμα και κωδικοποίησε μια τιμή μόνο όταν χρειάζεται.
Κατεστραμμένες διαφυγές
Ένα σύμβολο ποσοστού πρέπει να ακολουθείται από δύο δεκαεξαδικά ψηφία, και τα ψηφία πρέπει να σχηματίζουν έγκυρο UTF-8 για τα γράμματα με τόνο. Ένας σύνδεσμος που κόπηκε, ή ένα αδέσποτο σύμβολο ποσοστού που πληκτρολογήθηκε σε ένα κείμενο, μπορεί να αφήσει μια κατεστραμμένη διαφυγή όπως %E0%A4%A. Το εργαλείο αποκωδικοποιεί ό,τι μπορεί, αφήνει τα κατεστραμμένα byte ακριβώς όπως είναι και αναφέρει πόσα δεν μπόρεσε να αποκωδικοποιήσει. Δεν σταματά στο πρώτο σφάλμα.
Ειδικές περιπτώσεις
- Κενά σε σύνδεσμο γραμμένο με το χέρι. Η γραμμή διεύθυνσης του browser κωδικοποιεί τα κενά για σένα, αλλά ένας σύνδεσμος που αντιγράφηκε σε ένα έγγραφο μπορεί ακόμα να έχει ακατέργαστα κενά. Κωδικοποίησέ τα πριν στείλεις τον σύνδεσμο.
- Ονόματα τομέα με μη αγγλικούς χαρακτήρες. Χρησιμοποιούν ξεχωριστό σύστημα, το punycode, και η κωδικοποίηση της διαδρομής ή του ερωτήματος δεν αλλάζει το όνομα του διακομιστή.
- Μισό emoji. Μια κατεστραμμένη αντιγραφή μπορεί να αφήσει ένα μεμονωμένο μισό surrogate, που δεν κωδικοποιείται. Το εργαλείο το αντικαθιστά με το σύμβολο αντικατάστασης και σε ενημερώνει ότι το έκανε.
- Base64 σε συνδέσμους. Μια τιμή Base64 σε σύνδεσμο ακολουθεί τους δικούς της κανόνες, με - και _ στη θέση του + και του /. Δες Η Base64 εξηγημένη.
Πώς να το κάνεις με το fixmint
- Επικόλλησε το κείμενο ή τον σύνδεσμο στο πεδίο Κείμενο ή URL.
- Επίλεξε Κωδικοποίηση ή Αποκωδικοποίηση, και μετά Στοιχείο για μία τιμή ή Πλήρες URL για ολόκληρη τη διεύθυνση.
- Επίλεξε Χρήση του + για κενά (δεδομένα φόρμας) για συνδέσμους που αντιγράφηκαν από μια φόρμα ιστού.
- Για έναν σύνδεσμο, διάβασε το Παράμετροι ερωτήματος, αποκωδικοποιημένα για να δεις κάθε όνομα και τιμή.
- Αντίγραψε το αποτέλεσμα.
Σύντομες απαντήσεις
Τι σημαίνει το %20;
Ένα κενό. Η τιμή του byte του είναι 20 σε δεκαεξαδικό.
Γιατί υπάρχει + στον σύνδεσμό μου αντί για %20;
Ο σύνδεσμος πιθανότατα προήλθε από φόρμα, όπου το + σημαίνει κενό. Η επιλογή «Χρήση του + για κενά (δεδομένα φόρμας)» το αποκωδικοποιεί.
Γιατί βλέπω %2520 στον σύνδεσμό μου;
Η τιμή κωδικοποιήθηκε δύο φορές. Το σύμβολο ποσοστού του %20 κωδικοποιήθηκε ξανά ως %25. Αποκωδίκοποίησε μία φορά για να πάρεις πίσω το %20, και άλλη μία για να πάρεις το κενό.
Μετάφραση από το Αγγλικό πρωτότυπο με τη βοήθεια τεχνητής νοημοσύνης.
Σχόλια
Δεν υπάρχουν σχόλια ακόμη. Γίνετε οι πρώτοι.


