Funkcja dekodowania adresu URL JavaScript


Odpowiedzi:


219

1
dzięki chłopaki! wygląda na właściwą odpowiedź, ale Gumbo odpowiedział na to jako pierwszy .. Czuję, że zasługuje na uznanie
na.

16
To jest niepełna odpowiedź. Zobacz implementację urlDecode () poniżej autorstwa @anshuman.
Steven Francolla,

3
Fajnie, ale nie usunięto znaków „+”. Odpowiedź @ anshuman była dla mnie najlepsza
MusikAnimal

2
Nie działa ze spacjami, które są reprezentowane przez ++++
mmm

237

Oto pełna funkcja (zaczerpnięta z PHPJS ):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

34
+1: to jest prawdziwy kod urld, obsługuje przypadek zakodowania spacji jako +, wielkie dzięki
Máthé Endre-Botond

1
To jest to, czego potrzebowałem, gdy dane zostały zakodowane za pomocą funkcji urlencode () PHP.
Scott Keck-Warren,

1
Jeśli się nie mylę, to jest dekodowanie + jako% 20, a nie jako spacja - tak naprawdę nie tego chciałeś tutaj, prawda? Chciałbyś spacji, a nie innej wersji zakodowanego znaku ... nie?
Chris Moschini

8
@ChrisMoschini: Nie, to jest poprawne, ponieważ zamiana następuje przed wywołaniem dekodowania.
lfaraone

1
Dziękuję bardzo!! Jest to doskonały sposób na obsługę łańcuchów znaków w jquery, które zostały wcześniej zakodowane urlenkodowane przez php, właśnie to, czego potrzebowałem!
Dante Cullari

9

Użyj tego

unescape(str);

Nie jestem świetnym programistą JS, próbowałem wszystkich i to zadziałało świetnie!


2
Fajna odpowiedź, ale wygląda na to, że jest przestarzała na korzyść z decodeURIComponent()powodu słabej obsługi znaków spoza ASCII.
Brad Koch

9
decodeURIComponent(mystring);

możesz uzyskać przekazane parametry, używając tego fragmentu kodu:

//parse URL to get values: var i = getUrlVars()["i"];
function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

Lub ten jeden wiersz, aby uzyskać parametry:

location.search.split("your_parameter=")[1]

2
Zamiast tego powinieneś użyć window.location.search.
aloisdg przenosi się na codidact.com

3
//How decodeURIComponent Works

function proURIDecoder(val)
{
  val=val.replace(/\+/g, '%20');
  var str=val.split("%");
  var cval=str[0];
  for (var i=1;i<str.length;i++)
  {
    cval+=String.fromCharCode(parseInt(str[i].substring(0,2),16))+str[i].substring(2);
  }

  return cval;
}

document.write(proURIDecoder(window.location.href));

Dziękuję, to zadziałało dla mnie. decodeURIComponent nie działał dla mnie (zniekształcona sekwencja URI).
Smile4ever

2

Jeśli odpowiadasz za kodowanie danych w PHP przy użyciu urlencode, rawurlencode PHP współpracuje z komponentem decodeURIC komponentu JavaScript bez konieczności zastępowania znaku +.


0

Oto czego użyłem:

W JavaScript:

var url = "http://www.mynewsfeed.com/articles/index.php?id=17";
var encoded_url = encodeURIComponent(url);

var decoded_url = decodeURIComponent(encoded_url);

W PHP:

$url = "http://www.mynewsfeed.com/articles/index.php?id=17";
$encoded_url = url_encode(url);

$decoded_url = url_decode($encoded_url);

Możesz również wypróbować go online tutaj: http://www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()jest w porządku, ale nigdy nie chcesz go używać encodeURIComponent()bezpośrednio. To nie ucieczka zastrzeżone znaki takie jak *, !, ', (, i ). Sprawdź RFC3986 , gdzie jest to zdefiniowane, aby uzyskać więcej informacji na ten temat. Dokumentacja Mozilla Developer Network zawiera zarówno dobre wyjaśnienie, jak i rozwiązanie. Wyjaśnienie...

Aby być bardziej rygorystycznym w przestrzeganiu RFC 3986 (który zastrzega!, ', (,) I *), nawet jeśli te znaki nie mają sformalizowanych zastosowań ograniczających identyfikatory URI, można bezpiecznie użyć następujących znaków:

Rozwiązanie...

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

Jeśli nie jesteś pewien, sprawdź dobre, działające demo na JSBin.com . Porównaj to ze złym, działającym demo na JSBin.com używając encodeURIComponent()bezpośrednio .

Dobre wyniki kodu:

thing%2athing%20thing%21

Zły kod wynika z encodeURIComponent():

thing*thing%20thing!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.