Функція декодування JavaScript URL


157

Яка найкраща утиліта декодування URL-адреси JavaScript? Кодування теж було б непогано, і додатковий бонус - робота з jQuery.


36
Ви перевірили encodeURIComponentі decodeURIComponent?
Gumbo

це справді те саме?
у.

@Gumbo: те саме, що кодування URL та декодування URL-адрес - blooberry.com/indexdot/html/topics/urlencoding.htm
at.

Відповіді:


219

Я також використовував encodeURIComponent () і decodeURIComponent () .


1
спасибі, хлопці! виглядає як правильну відповідь, але Гамбо відповів на цей перший .. Я відчуваю , що він заслуговує кредит
на.

16
Це неповна відповідь. Дивіться реалізацію urlDecode () нижче від @anshuman.
Стівен Франколла

3
Добре, але знаки "+" не видалено. @ Anshuman відповідь працював найкраще для мене
MusikAnimal

2
Не працює з пробілами, які представлені ++++
ммм

237

Ось повна функція (взята з PHPJS ):

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

34
+1: це справжній urldecode, він обробляє випадки кодування космосу як +, велике спасибі
Máthé Endre-Botond

1
Це те, що мені потрібно було використовувати, коли дані кодувалися за допомогою функції urlencode () PHP.
Скотт Кек-Уоррен

1
Якщо я не помиляюся, це розшифровка + як% 20, а не як простір - це насправді не те, що ви хотіли тут, чи не так? Ви хочете пробіл, а не інша версія закодованого символу ... ні?
Кріс Москіні

8
@ChrisMoschini: Ні, це правильно, оскільки заміна відбувається перед викликом декодування.
lfaraone

1
Дуже дякую!! Це ідеальний спосіб обробляти рядки в jquery, які раніше були кодовані php, саме те, що мені потрібно !!
Данте Кулларі

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, PHP's rawurlencode працює з JavaScript декодуваннямURIComponent, не потребуючи заміни символу +.


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 дає як хороше пояснення, так і рішення. Пояснення ...

Щоб бути більш суворим у дотриманні 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!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.