Codificando todos os caracteres especiais em Javascript
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
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?