2010-11-27 9 views
147

Tiện ích giải mã URL JavaScript tốt nhất là gì? Việc mã hóa sẽ tốt hơn và làm việc tốt với jQuery là một phần thưởng bổ sung.Chức năng giải mã URL JavaScript

+35

Did bạn kiểm tra 'encod eURIComponent' và 'decodeURIComponent'? – Gumbo

+0

có thực sự giống nhau không? –

+2

@at: Điều tương tự như những gì? – Gumbo

Trả lời

209

Tôi cũng đã sử dụng encodeURIComponent()decodeURIComponent().

+1

cảm ơn các bạn! trông giống như câu trả lời đúng, nhưng Gumbo đã trả lời câu hỏi đầu tiên này .. Tôi cảm thấy anh ấy xứng đáng với tín dụng –

+15

Đây là câu trả lời chưa hoàn chỉnh. Xem triển khai urlDecode() bên dưới bởi @anshuman. –

+2

Đẹp nhưng không xóa dấu '+'. @ anshuman của câu trả lời làm việc tốt nhất cho tôi – MusikAnimal

224

Đây là một chức năng đầy đủ (lấy từ PHPJS):

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

+1: đây là urldecode thực sự, xử lý các trường hợp không gian được mã hóa như +, cảm ơn rất nhiều – SinistraD

+1

Đây là những gì tôi cần sử dụng khi dữ liệu được mã hóa bằng hàm urlencode() của PHP. –

+0

Siêu hữu ích cho tôi và mất một nano giây để thực hiện. Cảm ơn! –

9
decodeURIComponent(mystring); 

bạn có thể có được thông qua các thông số bằng cách sử dụng bit này mã:

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

Hoặc một-liner để lấy thông số:

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

Thay vào đó, bạn nên sử dụng 'window.location.search'. – aloisdg

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)); 
+0

Cảm ơn bạn, điều này đã làm việc cho tôi. decodeURIComponent không hoạt động đối với tôi (chuỗi URI không đúng định dạng). – Smile4ever

5

Sử dụng này

unescape(str); 

Tôi không phải là một lập trình viên JS vĩ đại, đã thử tất cả, và điều này đã làm việc tuyệt vời!

+1

Câu trả lời hay, nhưng có vẻ như là [lỗi thời] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FFunctions#escape_and_unescape_functions (Obsoleted_above_JavaScript_1.5)) có lợi cho 'decodeURIComponent()' do sự hỗ trợ kém của các ký tự không phải ASCII. –

1

Nếu bạn chịu trách nhiệm mã hóa dữ liệu bằng PHP sử dụng urlencode, rawurlencode của PHP hoạt động với decodeURIComponent của JavaScript mà không cần thay thế ký tự +.

1

Đây là những gì tôi đã sử dụng:

Trong JavaScript:

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

var decoded_url = decodeURIComponent(encoded_url); 

Trong PHP:

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

$decoded_url = url_decode($encoded_url); 

Bạn cũng có thể dùng thử trực tuyến ở đây: http://www.mynewsfeed.x10.mx/articles/index.php?id=17