คำอธิบายวิธี:
วิธีนี้ทำให้สามารถแทนที่ querystring.parse ได้
ไวยากรณ์:
การคัดลอกรหัสมีดังนี้:
Querystring.unescape
รับพารามิเตอร์:
ไม่มี
ซอร์สโค้ด:
การคัดลอกรหัสมีดังนี้:
// เป็นทางเลือกที่ปลอดภัยที่ปลอดภัยสำหรับการถอดรหัส
queryString.unescapeBuffer = function (s, decodespaces) {
var out = บัฟเฟอร์ใหม่ (s.length);
var state = 'char'; // States: Char, hex0, hex1
var n, m, hexchar;
สำหรับ (var inindex = 0, outindex = 0; inindex <= s.length; inindex ++) {
var c = s.charcodeat (inindex);
สลับ (สถานะ) {
กรณี 'ถ่าน':
สวิตช์ (c) {
Case Charcode ('%'):
n = 0;
m = 0;
state = 'hex0';
หยุดพัก;
Case Charcode ('+'):
ถ้า (decodespaces) c = charcode ('');
// ผ่านผ่าน
ค่าเริ่มต้น:
ออก [outindex ++] = c;
หยุดพัก;
-
หยุดพัก;
กรณี 'hex0':
state = 'hex1';
hexchar = c;
if (charcode ('0') <= c && c <= charcode ('9')) {
n = c - charcode ('0');
} อื่นถ้า (charcode ('a') <= c && c <= charcode ('f')) {
n = c - charcode ('a') + 10;
} อื่นถ้า (charcode ('a') <= c && c <= charcode ('f')) {
n = c - charcode ('a') + 10;
} อื่น {
ออก [outindex ++] = charcode ('%');
ออก [outindex ++] = c;
state = 'char';
หยุดพัก;
-
หยุดพัก;
กรณี 'hex1':
state = 'char';
if (charcode ('0') <= c && c <= charcode ('9')) {
m = c - charcode ('0');
} อื่นถ้า (charcode ('a') <= c && c <= charcode ('f')) {
m = c - charcode ('a') + 10;
} อื่นถ้า (charcode ('a') <= c && c <= charcode ('f')) {
m = c - charcode ('a') + 10;
} อื่น {
ออก [outindex ++] = charcode ('%');
ออก [outindex ++] = hexchar;
ออก [outindex ++] = c;
หยุดพัก;
-
ออก [outindex ++] = 16 * n+m;
หยุดพัก;
-
-
// todo สนับสนุนการคืนบัฟเฟอร์โดยพลการ
กลับออกไป. slice (0, outindex - 1);
-