Что такое encodeURI() и decodeURI() в JavaScript?

Опубликовано: 18 Августа, 2022

URL-адреса и URI предназначены для поиска/идентификации ресурсов, доступных в Интернете, все, что однозначно идентифицирует ресурс, является его URI, например идентификатор, имя. URL указывает ресурс и его протокол доступа. Все URL-адреса являются URI, но не все URI являются URL-адресами. URI может содержать только определенные символы из стандартного набора символов 128 ASCII. Зарезервированные символы, не принадлежащие этому набору, должны быть закодированы. Это означает, что нам нужно кодировать эти символы при передаче в URL. В JavaScript у нас есть две специальные функции для выполнения этих задач кодирования и декодирования URI. encodeURI () и decodeURI () эти функции введены для кодирования/декодирования неанглийских символов, таких как латинские, греческие буквы, используемые в URI (Uniform Resource Identifier). Также полезно кодировать спецсимволы, заменять пробелы в URI; иногда эти специальные символы или пробелы могут ограничивать URI.

1. encodeURI(): используется для кодирования заданного URI в формате UTF-8. Функция encodeURI () принимает URI (типа string) в качестве значения параметра функции и кодирует URI, заменяя каждый экземпляр определенных символов одной, двумя, тремя или четырьмя escape-последовательностями, представляющими кодировку символа UTF-8.

Синтаксис:

encodeURI(URI)

Параметры: здесь URI — это параметр, состоящий из полного универсального идентификатора ресурса URI (строкового типа), который вы хотите закодировать.

Возвращаемое значение: вышеприведенная функция вернет новую строку, представляющую «закодированный URI» для данного URI, предоставленного в качестве параметра функции.

Примечание. Во многих браузерах encodeURI() не кодирует многие символы, за которыми следует набор специальных символов [ ~!@#$&*()=:/,;?+' ] для кодирования этих наборов символов реализован escape() отдельно. А также английские алфавиты и цифры [ AZ az 0-9 – _ . ! ~ * ' ( ) ] не экранируются с помощью encodeURI() для кодирования полной строки URI, вы можете использовать encodeURI(), и если у вас есть часть строки URI, вы можете использовать encodeURIComponent() для кодирования определенной части строки URI.

2. decodeURI(): используется для декодирования уже ранее закодированного URI. Это работает в обратном порядке, беря закодированную строку и заменяя токены обычными символами. Функция decodeURI () принимает encodedURI (строкового типа) в качестве значения параметра функции и декодирует заданный encoded-URI, ранее созданный функцией encodeURI() или аналогичной процедурой.

Синтаксис:

decodeURI(encodedURI)

Параметры: Здесь encodedURI — это параметр, представляющий полный закодированный URI (унифицированный идентификатор ресурса). Если вы хотите декодировать, параметр URI должен содержать URI только в закодированной форме. Кроме того, он генерирует исключение «URIError», если данный параметр «encodedURI» содержит недопустимые последовательности символов.

Возвращаемое значение: вышеуказанная функция вернет новую строку, представляющую декодированную версию данного URI в закодированной форме.

Примечание. Заменяет каждую escape-последовательность в закодированном URI символом, который она представляет, но не декодирует escape-последовательности, которые не могли быть введены с помощью encodeURI. Он также используется для декодирования кириллических URL-адресов; Кириллический URL-адрес содержит кириллицу, похожую на буквы латиницы (используемой в английском языке), иногда используется для отслеживания пользователя и перенаправления его на поддельные веб-сайты.

Пример:

Javascript




<script>
    const uri = "https://www.geeksforgeeks.org/?x=γεια";
    const encoded = encodeURI(uri);
    console.log("Encoded URI - ", encoded);
  
    // Expected output: 
  
    try {
        console.log("Decoded URI - ", decodeURI(encoded));
  
        // Expected output: 
        // "https://www.geeksforgeeks.org/?x=γεια"
    } catch (e) {
        console.error(e);
    }
</script>

Выход: