¿Cuál de estos dos métodos debería usarse para codificar URL?
javascript
Aditya Shukla
fuente
fuente
encodeURI
no codificará/
así:encodeURIComponent("ac/dc")
=>ac%2Fdc
yencodeURI("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."
FuenteencodeURIComponent differs from encodeURI as follows
en: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Respuestas:
Depende de lo que realmente quieras hacer.
encodeURI supone que la entrada es un URI completo que podría tener algunos caracteres que necesitan codificación.
encodeURIComponent codificará todo con un significado especial, por lo que lo usará para componentes de URI como
fuente
Si está codificando una cadena para ponerla en un componente de URL (un parámetro de cadena de consulta), debe llamar
encodeURIComponent
.Si está codificando una URL existente, llame
encodeURI
.fuente
xkr.us tiene una gran discusión, con ejemplos. Para citar su resumen:
fuente
encodeURI
un error si usted está tratando de convertir un nombre de archivo a una dirección URL y el nombre del archivo tiene#
en ellaAquí hay un resumen.
escape () no codificará @ * _ + -. / /
No lo uses.
encodeURI () no codificará AZ az 0-9; , /? : @ & = + $ - _. ! ~ * '() #
Úselo cuando su entrada sea una URL completa como ' https://searchexample.com/search?q=wiki '
const queryStr = encodeURIComponent(someString)
fuente
encodeURIComponent (): asume que su argumento es una parte (como el protocolo, el nombre de host, la ruta o la cadena de consulta) de un URI. Por lo tanto, escapa a los caracteres de puntuación que se utilizan para separar las porciones de un URI.
encodeURI (): se utiliza para codificar la url existente
fuente
Diferencia entre
encodeURI
yencodeURIComponent
:encodeURIComponent(value)
se utiliza principalmente para codificar valores de parámetros queryString, y codifica todos los caracteres aplicables envalue
.encodeURI
ignora el prefijo de protocolo (http://
) y el nombre de dominio.En casos muy, muy raros, cuando desea implementar la codificación manual para codificar caracteres adicionales (aunque no es necesario codificarlos en casos típicos) como:,
! *
entonces puede usar:( fuente )
fuente
Otras respuestas describen los propósitos. Estos son los caracteres que cada función convertirá realmente :
Todos los caracteres anteriores se convierten en códigos de porcentaje hexadecimal. Espacio para
%20
, porcentaje para%25
, etc. Los siguientes caracteres pasan sin cambios.Estos son los caracteres que las funciones NO convertirán :
fuente
Como regla general uso
encodeURIComponent
. No tenga miedo del nombre largo pensando que es más específico en su uso, para mí es el método más utilizado. Además, no se deje engañar por el uso de encodeURI porque lo probó y parece que está codificando correctamente, probablemente no sea lo que pretendía usar y aunque su simple prueba usando "Fred" en un campo de nombre funcionó, encontrará más tarde, cuando use texto más avanzado, como agregar un signo y un hashtag, fallará. Puede ver las otras respuestas por las razones por las cuales esto es así.fuente