Fungsi Decode URL JavaScript

157

Apa utilitas decode URL JavaScript terbaik? Pengkodean juga akan menyenangkan dan bekerja dengan baik dengan jQuery adalah bonus tambahan.

di.
sumber
36
Apakah Anda memeriksa encodeURIComponentdan decodeURIComponent?
Gumbo
apakah itu benar-benar hal yang sama?
di
@Gumbo: hal yang sama dengan pengodean URL dan penguraian URL - blooberry.com/indexdot/html/topics/urlencoding.htm
at.

Jawaban:

219

Saya telah menggunakan encodeURIComponent () dan decodeURIComponent () juga.

Geoff
sumber
1
terima kasih kawan! tampak seperti jawaban yang benar, tapi Gumbo menjawab ini pertama .. Saya merasa seperti dia layak kredit
di.
16
Ini adalah jawaban yang tidak lengkap. Lihat implementasi urlDecode () di bawah ini oleh @anshuman.
Steven Francolla
3
Bagus tetapi tidak menghapus tanda '+'. Jawaban @ anshuman paling berhasil untuk saya
MusikAnimal
2
Tidak bekerja dengan spasi yang direpresentasikan dengan ++++
mmm
237

Berikut ini adalah fungsi lengkap (diambil dari PHPJS ):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
tidak manusiawi
sumber
34
+1: ini adalah urldecode yang sebenarnya, menangani kasus ruang yang dikodekan sebagai +, terima kasih banyak
Máthé Endre-Botond
1
Inilah yang perlu saya gunakan ketika data dikodekan dengan fungsi urlencode () PHP.
Scott Keck-Warren
1
Jika saya tidak salah, ini mendekode + sebagai% 20, bukan sebagai ruang - bukan itu yang Anda inginkan di sini, bukan? Anda menginginkan ruang, bukan versi lain dari karakter yang dikodekan ... bukan?
Chris Moschini
8
@ChrisMoschini: Tidak, ini benar karena penggantian terjadi sebelum panggilan decode.
lfaraone
1
Terima kasih banyak!! Ini adalah cara yang sempurna untuk menangani string dalam jquery yang sebelumnya telah disatukan dengan php, hanya apa yang saya butuhkan !!
Dante Cullari
9

Gunakan ini

unescape(str);

Saya bukan programmer JS hebat, sudah mencoba semua, dan ini berhasil luar biasa!

nithinreddy
sumber
2
Mendinginkan jawaban, tapi terlihat seperti itu usang dalam mendukung decodeURIComponent()karena dukungan miskin karakter non-ASCII.
Brad Koch
9
decodeURIComponent(mystring);

Anda dapat melewati parameter dengan menggunakan sedikit kode ini:

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

Atau ini satu-liner untuk mendapatkan parameter:

location.search.split("your_parameter=")[1]
Etienne Dupuis
sumber
2
Anda harus menggunakannya window.location.searchsebagai gantinya.
aloisdg pindah ke 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
sumber
Terima kasih, ini berhasil untuk saya. komponen decodeURIC tidak bekerja untuk saya (urutan URI cacat).
Smile4ever
2

Jika Anda bertanggung jawab untuk menyandikan data dalam PHP menggunakan urlencode, rawurlencode PHP berfungsi dengan komponen decodeURIC JavaScript dari JavaScript tanpa harus mengganti karakter +.

Brent Self
sumber
0

Inilah yang saya gunakan:

Dalam JavaScript:

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

var decoded_url = decodeURIComponent(encoded_url);

Dalam PHP:

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

$decoded_url = url_decode($encoded_url);

Anda juga dapat mencobanya online di sini: http://www.mynewsfeed.x10.mx/articles/index.php?id=17

pengguna3572058
sumber
0

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

methodpool.io
sumber
0

decodeURIComponent()baik-baik saja, tetapi Anda tidak ingin atau tidak encodeURIComponent()langsung digunakan . Ini gagal untuk melarikan diri reserved karakter seperti *, !, ', (, dan ). Lihat RFC3986 , di mana ini didefinisikan, untuk info lebih lanjut tentang itu. Dokumentasi Jaringan Pengembang Mozilla memberikan penjelasan dan solusi yang baik. Penjelasan...

Agar lebih ketat dalam mematuhi RFC 3986 (yang mencadangkan!, ', (,), Dan *), meskipun karakter ini tidak memiliki penggunaan pembatas URI yang diformalkan, hal berikut dapat digunakan dengan aman:

Larutan...

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

Jika Anda tidak yakin, lihat demo yang bagus dan berfungsi di JSBin.com . Bandingkan ini dengan demo yang buruk dan berfungsi di JSBin.com menggunakan encodeURIComponent()secara langsung .

Hasil kode yang bagus:

thing%2athing%20thing%21

Kode buruk dihasilkan dari encodeURIComponent():

thing*thing%20thing!

HoldOffHunger
sumber