Какой из этих двух методов следует использовать для кодирования URL?
javascript
Адитья Шукла
источник
источник
encodeURI
кодирование не будет выполняться/
так:encodeURIComponent("ac/dc")
=>ac%2Fdc
иencodeURI("ac/dc")
=>ac/dc
"encodeURIComponent() and encodeURI() encode a URI by replacing URL reserved characters with their UTF-8 encoding....They differ because encodeURI does not encode queryString or hash values...URLs do not allow many special characters, like spaces or slashes. However these special characters are part of life, so URL encoding was invented."
ИсточникencodeURIComponent differs from encodeURI as follows
адресу: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Ответы:
Это зависит от того, что вы действительно хотите сделать.
encodeURI предполагает, что ввод является полным URI, который может содержать некоторые символы, для которых требуется кодировка.
encodeURIComponent закодирует все со специальным значением, поэтому вы используете его для компонентов URI, таких как
источник
Если вы кодируете строку для добавления в компонент URL (параметр строки запроса), вам следует вызвать
encodeURIComponent
.Если вы кодируете существующий URL, позвоните
encodeURI
.источник
У xkr.us отличная дискуссия с примерами. Чтобы процитировать их резюме:
источник
encodeURI
сбой, если вы пытаетесь преобразовать имя файла в URL и имя файла содержится#
в немВот краткое изложение.
escape () не будет кодировать @ * _ + -. /
Не используйте это.
encodeURI () не будет кодировать AZ az 0-9; /? : @ & = + $ - _. ! ~ * '() #
Используйте его, когда вы вводите полный URL-адрес, например « https://searchexample.com/search?q=wiki »
const queryStr = encodeURIComponent(someString)
источник
encodeURIComponent (): предполагает, что его аргумент является частью (такой как протокол, имя хоста, путь или строка запроса) URI. Поэтому он избегает знаков препинания, которые используются для разделения частей URI.
encodeURI (): используется для кодирования существующего URL
источник
Разница между
encodeURI
иencodeURIComponent
:encodeURIComponent(value)
в основном используется для кодирования значений параметров queryString и кодирует каждый применимый символ вvalue
.encodeURI
игнорирует префикс протокола (http://
) и имя домена.В очень, очень редких случаях, когда вы хотите реализовать ручное кодирование для кодирования дополнительных символов (хотя их не требуется кодировать в типичных случаях), таких как:,
! *
тогда вы можете использовать:( источник )
источник
Другие ответы описывают цели. Вот символы, которые каждая функция на самом деле преобразует :
Все вышеперечисленные символы преобразуются в шестнадцатеричные коды процента. Пробел до
%20
, процент до%25
и т. Д. Символы ниже проходят без изменений.Вот символы, которые функции НЕ будут преобразовывать :
источник
Как правило, используйте
encodeURIComponent
. Не бойтесь длинного имени, думая, что оно более конкретно в его использовании, для меня это наиболее часто используемый метод. Также не впадайте в использование encodeURI, потому что вы проверили его, и он, кажется, правильно кодирует, вероятно, это не то, что вы хотели использовать, и хотя ваш простой тест с использованием «Fred» в поле первого имени сработал, вы обнаружите, что позже, когда вы будете использовать более сложный текст, такой как добавление амперсанда или хэштега, произойдет сбой. Вы можете посмотреть на другие ответы по причинам, почему это так.источник