Codificando todos os caracteres especiais em Javascript

Nov 10 2020

Tenho que codificar a string que recebo aqui e passá-la como um parâmetro de URL, então não acredito que possa passar um / ou um parêntese (considerando que tenho a seguinte string

KEY WEST / Florida(FL)

Estou tentando o seguinte

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

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

Nenhum deles está codificando a string que posso decodificar posteriormente em meu código, pois o primeiro mantém o () e o segundo mantém o /

Como faço isso de uma vez e, posteriormente, decodifico quando necessário?

Além disso, parece que escape () se tornou obsoleto, então qual forma de codificação é preferida?

Respostas

1 FZs Nov 10 2020 at 22:23

Para codificação de URL, funções encodeURIe encodeURIComponentdevem ser usadas.

encodeURIcodifica apenas caracteres especiais, enquanto encodeURIComponenttambém codifica caracteres que têm um significado no URL, por isso é usado para codificar strings de consulta, por exemplo.

Os parênteses são (conforme explicado aqui ), no entanto, permitidos em qualquer lugar na URL sem codificá-los, por isso os encodeURIComponentdeixa como estão.

A escapefunção pode ser considerada obsoleta e, embora oficialmente não seja, deve ser evitada.


então, qual forma de codificação é preferida?

  • Para URLs inteiros, encodeURI
  • Para partes de URL, por exemplo, string de consulta de fragmento, encodeURIComponent

Consulte também Quando você deve usar escape em vez de encodeURI/ encodeURIComponent?