Кодирование всех специальных символов в Javascript

Nov 10 2020

Мне нужно закодировать строку, которую я получаю здесь, и передать ее как параметр URL, поэтому я не верю, что смогу передать либо / или парантез (поэтому, учитывая, что у меня есть следующая строка

KEY WEST / Florida(FL)

Я пробую следующее

encodeURIComponent("KEY WEST / Florida(FL)")
"KEY%20WEST%20%2F%20Florida(FL)"

escape("KEY WEST / Florida(FL)")
"KEY%20WEST%20/%20Florida%28FL%29"

Ни один из них не кодирует строку, которую я могу декодировать позже в своем коде, так как первый сохраняет (), а второй сохраняет /

Как мне сделать это за один раз, а потом при необходимости расшифровать?

Также кажется, что escape () устарел, поэтому какой способ кодирования предпочтительнее?

Ответы

1 FZs Nov 10 2020 at 22:23

Для получения URL кодирования encodeURIи encodeURIComponentфункции должны быть использованы.

encodeURIкодирует только специальные символы, а encodeURIComponentтакже кодирует символы, которые имеют значение в URL-адресе, поэтому он используется, например, для кодирования строк запроса.

Круглые скобки (как объясняется здесь ), однако, разрешены в любом месте URL-адреса без их кодирования, поэтому encodeURIComponentоставляем их как есть.

escapeФункции можно считать устаревшим , и , хотя он официально не является, его следует избегать.


так какой способ кодирования предпочтительнее?

  • Для целых URL-адресов encodeURI
  • Для частей URL, например строки запроса фрагмента, encodeURIComponent

Также см. Когда вы должны использовать escape вместо encodeURI/ encodeURIComponent?