Функция JavaScript encodeURI

На протяжении большей части жизни JavaScript был языком программирования только для браузера и не мог работать на стороне сервера, как сейчас. Из-за этого JS имеет множество встроенных функций, специфичных для функций на стороне браузера, таких как строки кодирования для использования в URL-адресах. Вот некоторые из наиболее часто используемых функций: * encodeURI * encodeURIComponent * decodeURI * decodeURIComponent * escape * unescape Функция encodeURI, которой посвящена эта статья, используется для кодирования универсального ресурса.

На протяжении большей части жизни 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 , которая обрабатывает декодирование значений, закодированных в процентах, которые мы рассмотрим в другой статье.!

comments powered by Disqus