Chức năng giải mã URL JavaScript


157

Tiện ích giải mã URL JavaScript tốt nhất là gì? Mã hóa cũng sẽ rất tốt và hoạt động tốt với jQuery là một phần thưởng bổ sung.


36
Bạn đã kiểm tra encodeURIComponentdecodeURIComponent?
Gumbo

đó thực sự là điều tương tự?
tại.

@Gumbo: tương tự như mã hóa URL và giải mã URL - blooberry.com/indexdot/html/topics/urlencoding.htmlm
at.

Câu trả lời:


219

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


1
cảm ơn các bạn! Có vẻ như câu trả lời đúng, nhưng Gumbo đã trả lời điều này trước tiên .. Tôi cảm thấy như anh ấy xứng đáng nhận được tín dụng
tại.

16
Đây là một câu trả lời không đầy đủ. Xem cách triển khai urlDecode () bên dưới của @anshuman.
Steven Francolla

3
Đẹp nhưng nó không xóa dấu hiệu '+'. Câu trả lời của @ anshuman phù hợp nhất với tôi
MusikAnimal

2
Không hoạt động với các không gian được biểu thị bằng ++++
mmm

237

Đây là một chức năng hoàn chỉnh (lấy từ PHPJS ):

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

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

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.
Scott Keck-Warren

1
Nếu tôi không nhầm, đây là giải mã + dưới dạng% 20, không phải là không gian - đó không thực sự là những gì bạn muốn ở đây, phải không? Bạn muốn có không gian chứ không phải phiên bản khác của một nhân vật được mã hóa ... không?
Chris Moschini

8
@ChrisMoschini: Không, điều này đúng vì sự thay thế xảy ra trước cuộc gọi giải mã.
lfaraone 27/03/13

1
Cảm ơn bạn rất nhiều!! Đây là một cách hoàn hảo để xử lý các chuỗi trong jquery đã được mã hóa trước đó bằng php, đúng như những gì tôi cần !!
Dante Cullari

9

Dùng cái này

unescape(str);

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


2
Mát câu trả lời, nhưng có vẻ như nó lỗi thời ủng hộ decodeURIComponent()vì sự ủng hộ nghèo của các ký tự ASCII.
Brad Koch

9
decodeURIComponent(mystring);

bạn có thể nhận được các tham số được truyền bằng cách sử dụng bit mã này:

//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 lớp lót này để có được các tham số:

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

2
Bạn nên sử dụng window.location.searchthay thế.
aloisdg chuyển đến 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));

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

2

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


0

Đâ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 tại đây: http://www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()là tốt, nhưng bạn không bao giờ muốn sử dụng encodeURIComponent()trực tiếp. Đây không thoát khỏi nhân vật dành riêng như *, !, ', (, và ). Kiểm tra RFC3986 , nơi điều này được xác định, để biết thêm thông tin về điều đó. Tài liệu Mozilla Developer Network cung cấp cả giải thích tốt và giải pháp. Giải trình...

Để nghiêm ngặt hơn trong việc tuân thủ RFC 3986 (dự trữ !, ', (,) Và *), mặc dù các ký tự này không có cách sử dụng phân định URI chính thức, có thể sử dụng một cách an toàn:

Giải pháp...

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

Trong trường hợp bạn không chắc chắn, hãy xem bản demo hoạt động tốt tại JSBin.com . So sánh điều này với một bản demo hoạt động tồi tệ tại JSBin.com bằng cách sử dụng encodeURIComponent()trực tiếp .

Kết quả mã tốt:

thing%2athing%20thing%21

Kết quả mã xấu từ encodeURIComponent():

thing*thing%20thing!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.