На протяжении большей части жизни JavaScript был языком программирования только для браузера и не мог работать на стороне сервера, как сейчас. Из-за этого JS имеет множество встроенных функций, специфичных для функций на стороне браузера, таких как строки кодирования для использования в URL-адресах. Вот некоторые из наиболее часто используемых функций:
encodeURI
encodeURIComponent
decodeURI
decodeURIComponent
escape
unescape
encodeURI
, о которой идет речь в этой статье , используется для
кодирования универсального идентификатора ресурса (URI), чтобы
символы, не предназначенные для использования в URI (например, пробел),
форматировались правильно. Эти символы экранируются с использованием
процентного
кодирования или
кодировки URL-адреса для представления нестандартных символов URI.
Процентное кодирование - это просто шестнадцатеричное представление
символа ASCII с префиксом процента (%). Так, например, процентное
кодирование восклицательного знака (!) - %21
поскольку 21 - это
шестнадцатеричное число ASCII для восклицательного знака.
Что касается вариантов использования, предположим, что на вашем веб-сайте есть панель поиска, и введенные в нее запросы используются для создания URL-адреса, подобного этому:
https://mysite.com/q=[SEARCH_QUERY]
В таком случае использования весьма вероятно, что пользователь введет
строку, содержащую пробел (или другой зарезервированный символ), что
недопустимо в URL-адресах. Так что же нам делать, если пользователь
вводит, например, строку «веб-разработка»? Мы не можем разрешить
использование любого символа в нашем URL-адресе. Вот где на encodeURI
приходит encodeURI:
> let query = 'web development';
> let searchUrl = 'https://mysite.com/q=' + query;
> encodeURI(searchUrl)
'https://mysite.com/q=web%20development'
Обратите внимание, как пространство было заменено процентным
кодированием, %20
. Функция encodeURI
идеально подходит для этого,
потому что она не экранирует никаких других зарезервированных символов,
таких как двоеточие или косая черта. Это связано с тем, что он ожидает
получить в качестве входных данных полный URL-адрес, в отличие от
encodeURIComponent
этой функции. URL-адрес, переданный в encodeURI
может содержать любую допустимую часть схемы URL-адреса и не может быть
экранирован, в то время как другие зарезервированные или запрещенные
символы кодируются:
> encodeURI('https://scott: [email protected] :443/my/file.html?stack=abuse#javascript')
'https://scott: [email protected] :443/my/file.html?stack=abuse#javascript'
> encodeURI('https://scott: [email protected] :443/my/file.html?stack="abuse"#javascript')
'https://scott: [email protected] :443/my/file.html?stack=%22abuse%22#javascript'
Обратите внимание, что при первом вызове выше не было внесено никаких изменений в URL-адрес. Это потому, что в URL-адресе допустимы все символы. Во втором вызове у нас есть несколько кавычек, которые недействительны и поэтому закодированы.
Следующие символы не кодируются encodeURI
, независимо от того, где
они расположены в URL: A-Za-z0-9;,/?:@&=+$-_.!~*'()#
Эта функция может даже обрабатывать символы, отличные от ASCII, с использованием более длинной кодировки на основе UTF-8. Например, символ валюты евро (€) кодируется с использованием трех наборов процентного кодирования:
> encodeURI('€')
'%E2%82%AC'
Это позволяет передавать символы любого языка или символы специального форматирования через URL-адреса.
Заключение
Встроенная encodeURI
полезна для правильного форматирования
URL-адресов или, в более общем смысле, URI с незарезервированными
символами ASCII или даже символами UTF-8. Его следует использовать
каждый раз, когда вводимые пользователем данные используются при
построении URL-адреса, чтобы гарантировать его правильное
форматирование.
С другой стороны, у нас также есть decodeURI
, которая обрабатывает
декодирование значений, закодированных в процентах, которые мы
рассмотрим в другой статье.!