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


157

Какая лучшая утилита для декодирования URL JavaScript? Кодирование тоже подойдет, а работа с jQuery - это дополнительный бонус.


36
Вы проверяли encodeURIComponentи decodeURIComponent?
Гамбо

это действительно то же самое?
в.

@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
Это то, что мне нужно было использовать, когда данные были закодированы с помощью PHP-функции urlencode ().
Скотт Кек-Уоррен

1
Если я не ошибаюсь, это декодирование + как% 20, а не как пробел - это не совсем то, что вы хотели здесь, не так ли? Вы хотели бы пробел, а не другую версию закодированного символа ... нет?
Крис Москини

8
@ChrisMoschini: Нет, это правильно, потому что замена происходит до вызова декодирования.
13:45

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-rawurlencode работает с JavaScript decodeURIComponent без необходимости замены символа +.


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!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.