Περισσότερα
Κωδικοποίηση URL σε JavaScript;
Πώς μπορείτε να κωδικοποιήσετε με ασφάλεια μια διεύθυνση URL χρησιμοποιώντας JavaScript ώστε να μπορεί να τοποθετηθεί σε μια συμβολοσειρά GET;
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
Υποθέτω ότι πρέπει να κωδικοποιήσετε τη μεταβλητή myUrl
σε αυτή τη δεύτερη γραμμή;
2385
3
Ελέγξτε την ενσωματωμένη λειτουργία encodeURIComponent(str) και encodeURI(str).
Στην περίπτωσή σας, αυτό θα πρέπει να λειτουργήσει:
Έχετε τρεις επιλογές:
δεν θα κωδικοποιήσει:
@*/+
encodeURI()
δεν θα κωδικοποιήσει:~!@#$&*()=:/,;?+'
Η
encodeURIComponent()
δεν θα κωδικοποιήσει:~!*()'
Αλλά στην περίπτωσή σας, αν θέλετε να περάσετε ένα URL σε μια παράμετρο
GET
μιας άλλης σελίδας, θα πρέπει να χρησιμοποιήσετε τηνescape
ή τηνencodeURIComponent
, αλλά όχι τηνencodeURI
.Δείτε την ερώτηση του Stack Overflow Βέλτιστη πρακτική: escape, ή encodeURI / encodeURIComponent για περαιτέρω συζήτηση.
Μείνετε στο
encodeURIComponent()
. Η συνάρτησηencodeURI()
δεν μπαίνει στον κόπο να κωδικοποιήσει πολλούς χαρακτήρες που έχουν σημασιολογική σημασία στις διευθύνσεις URL (π.χ. "#", "?", και "&"). Τοescape()
είναι απαρχαιωμένο και δεν μπαίνει στον κόπο να κωδικοποιήσει τους χαρακτήρες "+", οι οποίοι θα ερμηνευτούν ως κωδικοποιημένα κενά στον διακομιστή (και, όπως επισημάνθηκε από άλλους εδώ, δεν κωδικοποιεί σωστά χαρακτήρες μη ASCII).Υπάρχει μια ωραία εξήγηση της διαφοράς μεταξύ
encodeURI()
καιencodeURIComponent()
αλλού. Αν θέλετε να κωδικοποιήσετε κάτι ώστε να μπορεί να συμπεριληφθεί με ασφάλεια ως συστατικό ενός URI (π.χ. ως παράμετρος συμβολοσειράς ερωτήματος), θέλετε να χρησιμοποιήσετε τηνencodeURIComponent()
.