ฟังก์ชันถอดรหัส URL ของ JavaScript


157

ยูทิลิตี้ถอดรหัส URL JavaScript ที่ดีที่สุดคืออะไร การเข้ารหัสก็ดีเช่นกันและทำงานได้ดีกับ jQuery เป็นโบนัสเพิ่มเติม


36
คุณตรวจสอบencodeURIComponentแล้วdecodeURIComponentหรือยัง?
Gumbo

คือจริงๆสิ่งเดียวกัน
ที่

@Gumbo: เช่นเดียวกับการเข้ารหัส URL และการถอดรหัส URL - blooberry.com/indexdot/html/topics/urlencoding.htm
ที่

คำตอบ:


219

ฉันใช้encodeURIComponent ()และdecodeURIComponent ()ด้วย


1
ขอบคุณเพื่อน! ดูเหมือนคำตอบที่ถูกต้อง แต่ Gumbo ตอบคำถามนี้ก่อน .. ฉันรู้สึกว่าเขาสมควรได้รับเครดิต
ที่

16
นี่คือคำตอบที่ไม่สมบูรณ์ ดูการใช้งาน urlDecode () ด้านล่างโดย @anshuman
Steven Francolla

3
ดี แต่ไม่ได้ลบเครื่องหมาย '+' @ คำตอบ Anshuman ของการทำงานที่ดีที่สุดสำหรับฉัน
MusikAnimal

2
ไม่ทำงานกับช่องว่างที่แสดงด้วย ++++
mmm

237

นี่คือฟังก์ชั่นที่สมบูรณ์ (นำมาจากPHPJS ):

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

34
+1: นี่คือ urldecode จริงจัดการกรณีของพื้นที่ที่ถูกเข้ารหัสเป็น + ขอบคุณมาก
Máthé Endre-Botond

1
นี่คือสิ่งที่ฉันต้องการที่จะใช้เมื่อข้อมูลที่ถูกเข้ารหัสด้วย urlencode ของ PHP () ฟังก์ชัน
Scott Keck-Warren

1
ถ้าฉันไม่ผิดนี้จะถอดรหัส + เป็น 20% ไม่ได้เป็นพื้นที่ - ที่ไม่ได้จริงๆสิ่งที่คุณต้องการที่นี่มันคืออะไร? คุณต้องการที่ว่างไม่ใช่ตัวละครที่เข้ารหัสอีกรุ่น ... ไม่?
Chris Moschini

8
@ChrisMoschini: ไม่ถูกต้องเพราะการแทนที่เกิดขึ้นก่อนการเรียกใช้การถอดรหัส
lfaraone

1
ขอบคุณมาก!! นี่เป็นวิธีที่สมบูรณ์แบบในการจัดการสตริงใน jquery ซึ่งก่อนหน้านี้ได้รับ urlencoded ด้วย php สิ่งที่ฉันต้องการ !!
Dante Cullari

9

ใช้สิ่งนี้

unescape(str);

ฉันไม่ใช่โปรแกรมเมอร์ JS ที่ยอดเยี่ยมได้ลองทั้งหมดและใช้งานได้ยอดเยี่ยม!


2
ปคำตอบ แต่ดูเหมือนว่ามันจำหน่ายแล้วในความโปรดปรานของdecodeURIComponent()เนื่องจากการสนับสนุนที่ดีของตัวละครที่ไม่ใช่ ASCII
แบรดโคช์

9
decodeURIComponent(mystring);

คุณสามารถได้รับผ่านพารามิเตอร์โดยใช้บิตของรหัสนี้:

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

หรือหนึ่งซับเพื่อรับพารามิเตอร์:

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

2
คุณควรใช้window.location.searchแทน
aloisdg กำลังย้ายไปยัง 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));

ขอบคุณมันใช้งานได้สำหรับฉัน decodeURIComponent ไม่ทำงานสำหรับฉัน (ลำดับ URI ที่มีรูปแบบไม่ถูกต้อง)
Smile4ever

2

หากคุณมีความรับผิดชอบในการเข้ารหัสข้อมูลใน PHP โดยใช้ urlencode rawurlencode ของ PHP จะทำงานร่วมกับการถอดรหัสของ JavaScript uric ส่วนประกอบโดยไม่จำเป็นต้องแทนที่อักขระ +


0

นี่คือสิ่งที่ฉันใช้:

ใน JavaScript:

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

var decoded_url = decodeURIComponent(encoded_url);

ใน PHP:

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

$decoded_url = url_decode($encoded_url);

คุณสามารถลองออนไลน์ได้ที่นี่: http://www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()ใช้ได้ แต่คุณไม่ต้องการใช้งานencodeURIComponent()โดยตรง นี้ล้มเหลวที่จะหลบหนีตัวอักษรสงวนชอบ*, !, ', และ( )ตรวจสอบRFC3986ซึ่งมีการกำหนดสิ่งนี้ไว้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนั้น เอกสารประกอบ Mozilla Developer Network ให้ทั้งคำอธิบายที่ดีและวิธีแก้ปัญหา ชี้แจง ...

หากต้องการเข้มงวดมากขึ้นในการปฏิบัติตาม RFC 3986 (ซึ่งสงวน!, ', (,) และ *) ถึงแม้ว่าตัวละครเหล่านี้ไม่มีการใช้ URI อย่างเป็นทางการ แต่ก็สามารถใช้ต่อไปนี้ได้อย่างปลอดภัย:

สารละลาย...

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

ในกรณีที่คุณไม่แน่ใจว่าตรวจสอบที่ดีสาธิตการทำงานที่ JSBin.com เปรียบเทียบกับที่ไม่ดี, การสาธิตการทำงานที่ JSBin.com ใช้encodeURIComponent()โดยตรง

ผลลัพธ์ที่ดี:

thing%2athing%20thing%21

ผลการรหัสที่ไม่ดีจากencodeURIComponent():

thing*thing%20thing!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.