Глобальная функция JavaScript decodeURI()
Определение и применение
Глобальная функция JavaScript decodeURI() декодирует URI (англ.
Uniform Resource Identifier – унифицированный идентификатор ресурса), ранее созданный функцией
encodeURI(), или другим подобным способом.
decodeURI() сохраняет закодированные разделители адреса: ;/?:@&=+$,#. Например,
%2F останется %2F. Чтобы декодировать отдельное значение полностью, используйте
decodeURIComponent(). См.
пример с разделителями и ошибками.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
decodeURI | 1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис:
decodeURI(encodedURI);Спецификация
Значения параметров
| Параметр | Описание |
|---|---|
encodedURI |
Закодированный Uniform Resource Identifier – унифицированный идентификатор ресурса. |
Возвращаемое значение
Новая строка с декодированным текстом. Исходная строка не изменяется. Перед обработкой аргумент преобразуется в
строку; например, число 123 станет "123".
Исключения
| Тип исключения | Описание |
|---|---|
URIError |
Возникает при неполной или неверной последовательности после %, например "%" или
"%ZZ", либо при байтах, не образующих корректный UTF-8, например "%D0".
|
TypeError |
Возникает при передаче Symbol (символьного значения) или другого значения, которое невозможно
преобразовать в строку.
|
Примеры, попробуйте сами
Как восстановить текст в адресе
Измените текст параметра q и сравните закодированный и восстановленный адрес.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
const uri = 'https://basicweb.ru/?q=справочник'
const encoded = encodeURI(uri) // кодируем URI
console.log(encoded) // "https://basicweb.ru/?q=%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA"
const decoded = decodeURI(encoded) // декодируем URI
console.log(decoded) // "https://basicweb.ru/?q=справочник"
Как декодируются разделители и ошибочные строки
Измените %2F или %26 и сравните функции. Затем исправьте строку с неполным кодом символа.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
for (const text of ['%2F%3F%26%23', 'a+b', '%D1%8F']) {
console.log(text, decodeURI(text), decodeURIComponent(text))
}
// Неполный процентный код и оборванный UTF-8 вызывают URIError.
for (const text of ['%', '%ZZ', '%D0']) {
try {
console.log(decodeURI(text))
} catch (error) {
console.log(text, error.name)
}
}