¿Cuál es la diferencia entre decodeURIComponent y decodeURI?

Resuelto Jon Tackabury asked hace 15 años • 8 respuestas

¿ Cuál es la diferencia entre las funciones de JavaScript decodeURIComponenty decodeURI?

Jon Tackabury avatar Apr 14 '09 20:04 Jon Tackabury
Aceptado

Para explicar la diferencia entre estos dos, déjame explicarte la diferencia entre encodeURIy encodeURIComponent.

La principal diferencia es que:

  • La encodeURIfunción está pensada para su uso en el URI completo.
  • La encodeURIComponentfunción está pensada para usarse en... bueno... componentes URI, es decir, cualquier parte que se encuentre entre separadores (; /?: @ & = + $, #).

Entonces, encodeURIComponentestos separadores también están codificados porque se consideran texto y no caracteres especiales.

Ahora, volvamos a la diferencia entre las funciones de decodificación, cada función decodifica cadenas generadas por su correspondiente contraparte de codificación cuidando la semántica de los caracteres especiales y su manejo.

MahdeTo avatar Apr 14 '2009 14:04 MahdeTo

encodeURIComponent/decodeURIComponent() es casi siempre el par que desea usar, para concatenar y dividir cadenas de texto en partes de URI.

encodeURI es un nombre menos común y engañoso: en realidad debería llamarse fixBrokenURI. Toma algo que es casi un URI, pero que contiene caracteres no válidos, como espacios, y lo convierte en un URI real. Tiene un uso válido para corregir URI no válidos a partir de la entrada del usuario, y también se puede usar para convertir un IRI (URI con caracteres Unicode simples) en un URI simple (usando UTF-8 con % de escape para codificar el código no ASCII). ).

Mientras que encodeURI en realidad debería llamarse fixBrokenURI(), decodeURI() también podría llamarse potencialmenteBreakMyPreviouslyWorkingURI(). No se me ocurre ningún uso válido para ello en ninguna parte; evitar.

bobince avatar Apr 14 '2009 14:04 bobince