Подтвердить что ты не робот

Разница между escape, encodeuri, encodeURIComponent

В JavaScript, в чем разница между

  • escape/unescape
  • encodeuri/decodeuri
  • encodeURIComponent/decodeURIComponent
4b9b3361

Ответ 1

Для визуально настроенных, вот таблица, показывающая эффекты encodeURI, encodeURIComponent и escape на обычно используемых символьных символах ASCII:

Char  encUrI  encURIComp  escape
*     *       *           *
.     .       .           .
_     _       _           _
-     -       -           -
~     ~       ~           %7E
'     '       '           %27
!     !       !           %21
(     (       (           %28
)     )       )           %29
/     /       %2F         /
+     +       %2B         +
@     @       %40         @
?     ?       %3F         %3F
=     =       %3D         %3D
:     :       %3A         %3A
#     #       %23         %23
;     ;       %3B         %3B
,     ,       %2C         %2C
$     $       %24         %24
&     &       %26         %26
      %20     %20         %20
%     %25     %25         %25
^     %5E     %5E         %5E
[     %5B     %5B         %5B
]     %5D     %5D         %5D
{     %7B     %7B         %7B
}     %7D     %7D         %7D
<     %3C     %3C         %3C
>     %3E     %3E         %3E
"     %22     %22         %22
\     %5C     %5C         %5C
|     %7C     %7C         %7C
`     %60     %60         %60

Ответ 2

  • escape - сломанный, устаревший, не используйте
  • encodeURI - кодирует символы, которые не разрешены (необработанные) в URL-адресах (используйте его для исправления сломанных URI, если вы не можете исправить их заранее)
  • encodeURIComponent - как encodeURI плюс символы со специальным значением в URI (используйте его для кодирования данных для вставки в URI)

Ответ 3

Прежде всего - Escape устарел и не должен использоваться.

encodeURI()

Вы должны использовать это, когда хотите кодировать URL-адрес, он кодирует символы, которые не разрешены в URL-адресе.

encodeURIComponent()

Должно использоваться, если вы хотите кодировать параметры вашего URL-адреса, вы также можете использовать его для кодирования целого URL-адреса. Но вам придется расшифровать его, чтобы снова использовать его.

-

Я бы сказал, что это дубликат. Здесь хороший ответ на SO - Credits принадлежит Арне Эвертссону: Когда вы должны использовать escape вместо encodeURI/encodeURIComponent?

Там много деталей о том, почему/почему не на эту тему.

Ответ 4

  • escape - не рекомендуется использовать.

  • encodeURI - заменяет все символы, кроме ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # a-z 0-9

  • encodeURIComponent - заменяет все символы, кроме - _ . ! ~ * ' ( ) a-z 0-9

Ответ 5

encodeURI: используйте, если вы не хотите кодировать символы, имеющие особое значение в URL-адресе.

пример:

str = ";/?:@=& <-- reserved, ok?"; // according to https://perishablepress.com/stop-using-unsafe-characters-in-urls/
str = encodeURI(str);
console.log(str); 
// ";/?:@=&%20%3C--%20reserved,%20ok?"

encodeURIComponent: используйте, когда вы хотите кодировать символы, которые имеют особое значение в URL-адресе, если они не закодированы. encodeURIComponent также часто используется для кодирования файлов cookie, поскольку он также кодирует запятые, полуколоны и белые пробелы, которые запрещены в файлах cookie (MDN).

пример:

str = ";/?:@=& <-- reserved, ok?"; // according to https://perishablepress.com/stop-using-unsafe-characters-in-urls/
str = encodeURIComponent(str);
console.log(str); 
// "%3B%2F%3F%3A%40%3D%26%20%3C--%20reserved%2C%20ok%3F"

escape: поскольку этот был устаревшим (w3schools), я не делал слишком много исследование его использования. Он кодирует несколько иной набор символов по сравнению с encodeURIComponent, а именно: + и @не кодируются, а некоторые другие кодируются, что encodeURIComponent не кодирует при использовании escape.

Пример:

str = ";/?:@=& <-- reserved, ok?"; // according to https://perishablepress.com/stop-using-unsafe-characters-in-urls/
str = escape(str);
console.log(str); 
// "%3B/%3F%[email protected]%3D%26%20%3C--%20reserved%2C%20ok%3F"