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.