В JavaScript, в чем разница между
- escape/unescape
- encodeuri/decodeuri
- encodeURIComponent/decodeURIComponent
В JavaScript, в чем разница между
Для визуально настроенных, вот таблица, показывающая эффекты 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
escape
- сломанный, устаревший, не используйтеencodeURI
- кодирует символы, которые не разрешены (необработанные) в URL-адресах (используйте его для исправления сломанных URI, если вы не можете исправить их заранее)encodeURIComponent
- как encodeURI
плюс символы со специальным значением в URI (используйте его для кодирования данных для вставки в URI)Прежде всего - Escape устарел и не должен использоваться.
encodeURI()
Вы должны использовать это, когда хотите кодировать URL-адрес, он кодирует символы, которые не разрешены в URL-адресе.
encodeURIComponent()
Должно использоваться, если вы хотите кодировать параметры вашего URL-адреса, вы также можете использовать его для кодирования целого URL-адреса. Но вам придется расшифровать его, чтобы снова использовать его.
-
Я бы сказал, что это дубликат. Здесь хороший ответ на SO - Credits принадлежит Арне Эвертссону: Когда вы должны использовать escape вместо encodeURI/encodeURIComponent?
Там много деталей о том, почему/почему не на эту тему.
escape
- не рекомендуется использовать.
encodeURI
- заменяет все символы, кроме
; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # a-z 0-9
encodeURIComponent
- заменяет все символы, кроме
- _ . ! ~ * ' ( ) a-z 0-9
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"