Qual desses dois métodos deve ser usado para codificar URLs?
javascript
Aditya Shukla
fonte
fonte
encodeURI
não codificará/
:encodeURIComponent("ac/dc")
=>ac%2Fdc
eencodeURI("ac/dc")
=> #ac/dc
"encodeURIComponent() and encodeURI() encode a URI by replacing URL reserved characters with their UTF-8 encoding....They differ because encodeURI does not encode queryString or hash values...URLs do not allow many special characters, like spaces or slashes. However these special characters are part of life, so URL encoding was invented."
OrigemencodeURIComponent differs from encodeURI as follows
em: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Respostas:
Depende do que você realmente deseja fazer.
encodeURI assume que a entrada é um URI completo que pode ter alguns caracteres que precisam ser codificados.
encodeURIComponent codificará tudo com significado especial; portanto, você o usará para componentes de URIs como
fonte
Se você estiver codificando uma string para inserir um componente de URL (um parâmetro de string de consulta), deve ligar
encodeURIComponent
.Se você estiver codificando um URL existente, ligue
encodeURI
.fonte
O xkr.us tem uma ótima discussão, com exemplos. Para citar seu resumo:
fonte
encodeURI
falhará se você estiver tentando converter um nome de arquivo em um URL e o nome do arquivo#
estiver neleAqui está um resumo.
escape () não codifica @ * _ + -. /
Não use isso.
encodeURI () não codificará AZ az 0-9; , /? : @ & = + $ - _. ! ~ * '() #
Use-o quando sua entrada for um URL completo como ' https://searchexample.com/search?q=wiki '
const queryStr = encodeURIComponent(someString)
fonte
encodeURIComponent (): assume que seu argumento é uma parte (como o protocolo, nome do host, caminho ou cadeia de caracteres da consulta) de um URI. Portanto, ele escapa os caracteres de pontuação usados para separar as partes de um URI.
encodeURI (): é usado para codificar o URL existente
fonte
Diferença entre
encodeURI
eencodeURIComponent
:encodeURIComponent(value)
é usado principalmente para codificar valores de parâmetro queryString e codifica todos os caracteres aplicáveis emvalue
.encodeURI
ignora o prefixo do protocolo (http://
) e o nome do domínio.Em casos muito, muito raros, quando você deseja implementar a codificação manual para codificar caracteres adicionais (embora eles não precisem ser codificados em casos típicos) como:,
! *
então você pode usar:( fonte )
fonte
Outras respostas descrevem os propósitos. Aqui estão os caracteres que cada função realmente converterá :
Todos os caracteres acima são convertidos em códigos percentuais hexadecimais. Espaço para
%20
, porcentagem para%25
etc. Os caracteres abaixo passam inalterados.Aqui estão os caracteres que as funções NÃO converterão :
fonte
Como regra geral, use
encodeURIComponent
. Não tenha medo do nome longo, pensando que é mais específico em seu uso, para mim é o método mais comumente usado. Além disso, não se preocupe em usar o encodeURI porque você o testou e parece estar codificando corretamente, provavelmente não é o que você queria usar e, embora seu teste simples usando "Fred" em um campo de nome tenha funcionado, você encontrará mais tarde, quando você usar texto mais avançado, como adicionar um e comercial ou hashtag, ele falhará. Você pode olhar para as outras respostas pelos motivos pelos quais isso acontece.fonte