JavaScript URL Kod Çözme işlevi


Yanıtlar:


219

1
teşekkürler beyler! Doğru cevap gibi görünüyor, ama Bamya .. Onun takdiri hak gibi hissediyorum öncelikle bu cevap
en.

16
Bu eksik bir cevap. @Anshuman tarafından sağlanan urlDecode () uygulamasına bakın.
Steven Francolla

3
Güzel ama '+' işaretlerini kaldırmadı. @ anshuman'ın cevabı benim için en iyi şekilde çalıştı
MusikAnimal

2
++++ ile temsil edilen boşluklarla çalışmaz
mmm

237

İşte tam bir işlev ( PHPJS'den alınmıştır ):

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

34
+1: Bu gerçek urldecode, + olarak kodlanan alanın durumunu ele alıyor, çok teşekkürler
Máthé Endre-Botond

1
Bu veri PHP'nin urlencode () fonksiyonu ile kodlanmış zaman kullanmam gerekiyordu.
Scott Keck-Warren

1
Yanılmıyorsam, bu +% 20 olarak kod çözüyor, boşluk olarak değil - burada gerçekten istediğin şey bu değil mi? Alanı istersiniz, kodlanmış bir karakterin başka bir versiyonunu değil.
Chris Moschini

8
@ChrisMoschini: Hayır, bu doğru çünkü kod çözme çağrısından önce değiştiriliyor.
lfaraone

1
Çok teşekkür ederim!! Bu daha önce php, sadece ne gerek urlencoded edilmiştir jquery dizeleri işlemek için mükemmel bir yoldur!
Dante Cullari

9

Bunu kullan

unescape(str);

Ben büyük bir JS programcısı değilim, hepsini denedim ve bu harika çalıştı!


2
O oluyor gibi cevap soğutun, ama görünüyor obsoleted lehine decodeURIComponent()nedeniyle ASCII olmayan karakterlerin kötü desteğine.
Brad Koch

9
decodeURIComponent(mystring);

bu kod bitini kullanarak parametreleri geçirebilirsiniz:

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

Veya parametreleri almak için bu tek astar:

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

2
Bunun window.location.searchyerine kullanmalısınız .
aloisdg taşınma 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));

Teşekkür ederim, bu benim için çalıştı. decodeURIComponent benim için çalışmadı (Hatalı Biçimlendirilmiş URI dizisi).
Smile4ever

2

PHP'deki verileri urlencode kullanarak kodlamaktan sorumluysanız, PHP'nin rawurlencode kodu + karakterini değiştirmeye gerek kalmadan JavaScript decodeURIComponent ile çalışır.


0

İşte kullandığım:

JavaScript'te:

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

var decoded_url = decodeURIComponent(encoded_url);

PHP dilinde:

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

$decoded_url = url_decode($encoded_url);

Burada çevrimiçi olarak da deneyebilirsiniz: http://www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()iyidir, ama asla encodeURIComponent()doğrudan kullanmak istemezsiniz . Bu gibi ayrılmış karakterlerden kurtulmak başarısız *, !, ', (, ve ). Check out RFC 3986 bu konuda daha fazla bilgi için, tanımlanır. Mozilla Geliştirici Ağı belgeleri hem iyi bir açıklama hem de bir çözüm sunar. Açıklama ...

RFC 3986'ya (!, ', (,) Ve * ayıran) bağlı kalma konusunda daha katı olmak için, bu karakterlerin resmi URI sınırlayıcı kullanımları olmamasına rağmen, aşağıdakiler güvenle kullanılabilir:

Çözüm...

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

Emin değilseniz JSBin.com adresinde iyi çalışan bir demoya göz atın . Doğrudan JSBin.com kötü, çalışan bir demoencodeURIComponent() ile karşılaştırın .

İyi kod sonuçları:

thing%2athing%20thing%21

Kötü kod sonuçları encodeURIComponent():

thing*thing%20thing!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.