JavaScript URL Decode Funktion

157

Was ist das beste Dienstprogramm zum Dekodieren von JavaScript-URLs? Das Codieren wäre auch schön und eine gute Zusammenarbeit mit jQuery ist ein zusätzlicher Bonus.

beim.
quelle
36
Hast du nachgesehen encodeURIComponentund decodeURIComponent?
Gumbo
ist das wirklich dasselbe
um.
@Gumbo: das Gleiche wie URL-Codierung und URL-Decodierung - blooberry.com/indexdot/html/topics/urlencoding.htm
at.

Antworten:

219

Ich habe auch encodeURIComponent () und decodeURIComponent () verwendet .

Geoff
quelle
1
danke Leute! sieht aus wie die richtige Antwort, aber Gumbo beantwortet diese erste .. Ich fühle mich wie er den Kredit verdient
bei.
16
Dies ist eine unvollständige Antwort. Siehe die unten stehende Implementierung von urlDecode () von @anshuman.
Steven Francolla
3
Schön, aber es wurden keine '+' Zeichen entfernt. @ anshumans Antwort funktionierte am besten für mich
MusikAnimal
2
Funktioniert nicht mit Leerzeichen, die mit ++++
mmm
237

Hier ist eine vollständige Funktion (aus PHPJS entnommen ):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
anshuman
quelle
34
+1: Dies ist der wahre URL-Code. Er behandelt den Fall, dass Speicherplatz als + codiert wird, vielen Dank
Máthé Endre-Botond
1
Dies musste ich verwenden, als die Daten mit der urlencode () - Funktion von PHP codiert wurden.
Scott Keck-Warren
1
Wenn ich mich nicht irre, dekodiert dies + als% 20, nicht als Leerzeichen - das ist nicht wirklich das, was Sie hier wollten, oder? Sie möchten den Platz, nicht eine andere Version eines verschlüsselten Zeichens ... nein?
Chris Moschini
8
@ChrisMoschini: Nein, das ist richtig, da das Ersetzen vor dem Dekodierungsaufruf erfolgt.
lfaraone
1
Ich danke dir sehr!! Dies ist eine perfekte Möglichkeit, mit Strings in jquery umzugehen, die zuvor mit PHP urlencodiert wurden, genau das, was ich brauchte !!
Dante Cullari
9

Benutze das

unescape(str);

Ich bin kein großartiger JS-Programmierer, habe alles versucht und das hat super funktioniert!

nithinreddy
quelle
2
Kühle Antwort, aber sieht aus wie es ist veraltet zu Gunsten decodeURIComponent()aufgrund der schlechten Unterstützung von Nicht-ASCII - Zeichen.
Brad Koch
9
decodeURIComponent(mystring);

Mit diesem Code können Sie übergebene Parameter abrufen:

//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;
}

Oder dieser Einzeiler, um die Parameter zu erhalten:

location.search.split("your_parameter=")[1]
Etienne Dupuis
quelle
2
Sie sollten window.location.searchstattdessen verwenden.
Aloisdg wechselt zu 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));
Irfan M.
quelle
Danke, das hat bei mir funktioniert. decodeURIComponent hat bei mir nicht funktioniert (fehlerhafte URI-Sequenz).
Smile4ever
2

Wenn Sie für die Codierung der Daten in PHP mit Urlencode verantwortlich sind, funktioniert der Rawurlencode von PHP mit der decodeURIComponent von JavaScript, ohne dass das Zeichen + ersetzt werden muss.

Brent Self
quelle
0

Folgendes habe ich verwendet:

In JavaScript:

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

var decoded_url = decodeURIComponent(encoded_url);

In PHP:

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

$decoded_url = url_decode($encoded_url);

Sie können es auch online hier ausprobieren: http://www.mynewsfeed.x10.mx/articles/index.php?id=17

user3572058
quelle
0

var uri = "my test.asp?name=ståle&car=saab";
console.log(encodeURI(uri));

methodpool.io
quelle
0

decodeURIComponent()ist in Ordnung, aber Sie wollen nie encodeURIComponent()direkt verwenden. Dies scheitert reservierte Zeichen zu entkommen wie *, !, ', (, und ). Weitere Informationen hierzu finden Sie in RFC3986 , wo dies definiert ist. Die Dokumentation zum Mozilla Developer Network bietet sowohl eine gute Erklärung als auch eine Lösung. Erläuterung...

Um bei der Einhaltung von RFC 3986 (das reserviert !, ', (,) Und *) strenger zu sein, kann Folgendes sicher verwendet werden, obwohl diese Zeichen keine formalisierten URI-Begrenzungsverwendungen haben:

Lösung...

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

Wenn Sie sich nicht sicher sind, sehen Sie sich eine gute, funktionierende Demo auf JSBin.com an . Vergleichen Sie dies mit einer schlechten, funktionierenden Demo bei JSBin.com, die encodeURIComponent()direkt verwendet wird .

Gute Codeergebnisse:

thing%2athing%20thing%21

Schlechter Code resultiert aus encodeURIComponent():

thing*thing%20thing!

HoldOffHunger
quelle