Глобальная функция JavaScript decodeURIComponent()
Определение и применение
Глобальная функция JavaScript decodeURIComponent() декодирует управляющие последовательности символов в
компоненте URI (англ. Uniform Resource Identifier – унифицированный идентификатор ресурса), ранее
созданный
encodeURIComponent(), или другим подобным способом.
decodeURIComponent() декодирует и разделители, например %2F в / и
%26 в &. Применяйте её к отдельному значению, а не к целому адресу, чтобы не превратить
закодированные данные в разделители. См.
пример с разделителями и ошибками.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
decodeURIComponent | 1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис:
decodeURIComponent(encodedURI);Спецификация
ECMAScript — decodeURIComponent().
Значения параметров
| Параметр | Описание |
|---|---|
encodedURI |
Строковое значение, содержащее закодированный компонент Uniform Resource Identifier. |
Возвращаемое значение
Новая строка с декодированным текстом. Исходная строка не изменяется. Перед обработкой аргумент преобразуется в
строку; например, число 123 станет "123".
Исключения
| Тип исключения | Описание |
|---|---|
URIError |
Возникает при неполной или неверной последовательности после %, например "%" или
"%ZZ", либо при байтах, не образующих корректный UTF-8, например "%D0".
|
TypeError |
Возникает при передаче Symbol (символьного значения) или другого значения, которое невозможно
преобразовать в строку.
|
Примеры, попробуйте сами
Как восстановить значение параметра
Измените закодированное значение и сравните его с исходным текстом.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
const value = 'чай & кофе #1'
const encoded = encodeURIComponent(value)
console.log(encoded) // %D1%87%D0%B0%D0%B9%20%26%20%D0%BA%D0%BE%D1%84%D0%B5%20%231
console.log('https://basicweb.ru/?q=' + encoded)
console.log(decodeURIComponent(encoded)) // чай & кофе #1
Как декодируются разделители и ошибочные строки
Измените %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(decodeURIComponent(text))
} catch (error) {
console.log(text, error.name)
}
}