Κωδικοποίηση 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 σε αυτή τη δεύτερη γραμμή;

Λύση

Ελέγξτε την ενσωματωμένη λειτουργία encodeURIComponent(str) και encodeURI(str).
Στην περίπτωσή σας, αυτό θα πρέπει να λειτουργήσει:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
Σχόλια (9)

Έχετε τρεις επιλογές:

  • δεν θα κωδικοποιήσει: @*/+

  • encodeURI() δεν θα κωδικοποιήσει: ~!@#$&*()=:/,;?+'

  • Η encodeURIComponent() δεν θα κωδικοποιήσει: ~!*()'

Αλλά στην περίπτωσή σας, αν θέλετε να περάσετε ένα URL σε μια παράμετρο GET μιας άλλης σελίδας, θα πρέπει να χρησιμοποιήσετε την escape ή την encodeURIComponent, αλλά όχι την encodeURI.

Δείτε την ερώτηση του Stack Overflow Βέλτιστη πρακτική: escape, ή encodeURI / encodeURIComponent για περαιτέρω συζήτηση.

Σχόλια (10)

Μείνετε στο encodeURIComponent(). Η συνάρτηση encodeURI() δεν μπαίνει στον κόπο να κωδικοποιήσει πολλούς χαρακτήρες που έχουν σημασιολογική σημασία στις διευθύνσεις URL (π.χ. "#", "?", και "&"). Το escape() είναι απαρχαιωμένο και δεν μπαίνει στον κόπο να κωδικοποιήσει τους χαρακτήρες "+", οι οποίοι θα ερμηνευτούν ως κωδικοποιημένα κενά στον διακομιστή (και, όπως επισημάνθηκε από άλλους εδώ, δεν κωδικοποιεί σωστά χαρακτήρες μη ASCII).

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

Σχόλια (0)