¿Cuál de estos dos métodos se debe usar para codificar URL?¿Debo usar encodeURI o encodeURIComponent para codificar URL?
Respuesta
Depende de lo que realmente está queriendo hacer.
encodeURI asume que la entrada es un URI completo que puede tener algunos caracteres que necesitan codificación.
encodeURIComponent codificará todo con un significado especial, por lo que usarlo para componentes de URIs como
var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);
Si está codificando una cadena para insertar un componente de URL (un parámetro de cadena de consulta), debe llamar al encodeURIComponent
.
Si está codificando una URL existente, llame al encodeURI
.
http://xkr.us/articles/javascript/encode-compare/ tiene una gran discusión, con ejemplos. Para citar su resumen:
"El método escape() no codifica el carácter + que se interpreta como un espacio en el servidor, así como generado por formularios con espacios en sus campos. Debido a esta deficiencia y el hecho que esta función no maneja caracteres no ASCII correctamente, se debe evitar el uso de la fuga() siempre que sea posible La mejor alternativa es generalmente encodeURIComponent()
de escape() no codificar:.. @ */+
El uso del método encodeURI() es un poco más especializado que escape() en que codifica para URI en oposición a la cadena de consulta, que es parte de una URL. Utilice este método cuando necesite codificar una cadena a b Se usa para cualquier recurso que use URI y necesita ciertos caracteres para permanecer sin codificar. Tenga en cuenta que este método no codifica el carácter ', ya que es un carácter válido dentro de los URI.
encodeURI() no va a codificar: ~ @ # $ & *() =: /,; +'
Por último, el encodeURIComponent() método debe utilizarse en la mayoría de los casos cuando se codifica un componente único!? de un URI. Este método codificará ciertos caracteres que normalmente se reconocerían como caracteres especiales para URI, de forma que se puedan incluir muchos componentes. Tenga en cuenta que este método no codifica el carácter ', ya que es un carácter válido dentro de los URI.
encodeURIComponent() no va a codificar:! ~ *() '"
encodeURIComponent(): asume que su argumento es una parte (por ejemplo, el protocolo, el nombre de host, ruta o cadena de consulta) de un . URI por lo tanto, se escapa de los signos de puntuación que se utilizan para separar el portionsof un URI
encodeURI (.): se utiliza para la codificación de URL existente
En caso de que desee codificar estos caracteres también: ! ' *) (
, entonces la solución es:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
(source)
No deberías escapar de esos charachters en la url. – Arashsoft
Como dice la documentación citada: "estos caracteres no tienen usos de delimitación URI formalizados" – caesarsol
@caesarsol así que, ¿debo editar mi respuesta? déjame saber tus pensamientos porque no puedo entender lo que significa esa documentación citada ... –
Como regla general el uso encodeURIComponent
. No tengas miedo del nombre largo pensando que es más específico en su uso, para mí es el método más comúnmente utilizado.Tampoco se deje engañar por el uso de encodeURI porque lo probó y parece estar codificando correctamente, probablemente no es lo que pretendía usar y aunque su simple prueba con "Fred" en un campo de primer nombre funcionó, encontrará más tarde, cuando utilice texto más avanzado, como agregar un ampersand o un hashtag, fallará. Puede ver las otras respuestas por las razones por las que esto es.
- 1. Cómo codificar períodos para URL en Javascript?
- 2. ¿Cómo codificar la siguiente URL utilizando JavaScript o jQuery correctamente?
- 3. ¿Qué debo codificar para usar HTTPS?
- 4. jQuery encodeURI para href no funciona
- 5. ¿Debería encodeURIComponent usarse para codificar parámetros de solicitud post ajax?
- 6. codificar Por qué URL, o qué caracteres para codificar
- 7. Javascript encodeURI como función en postgresql?
- 8. ¿Cómo codificar los parámetros de URL?
- 9. Java - codificar URL
- 10. ¿Debo usar StringBuilder o StringBuffer para webapps?
- 11. Debo usar ipairs o un ciclo para
- 12. Html dentro de XML. Debo usar CDATA o codificar el HTML
- 13. ¿Debo usar eval() o call_user_func()?
- 14. ¿Debo usar Flash o Flex?
- 15. ¿Debo usar em o px?
- 16. ¿Debo usar multiplicación o división?
- 17. ¿Debo usar Pilones o Pirámide?
- 18. ¿Debo usar ArrayList o IList
- 19. ¿Debo usar herencia o composición?
- 20. ¿Debo usar horquilla o hilos?
- 21. ¿Debo usar Phobos o Tango?
- 22. ¿Debo usar alias o alias_method?
- 23. ¿Debo usar byte o int?
- 24. ¿Debo usar CouchDB o SimpleDB?
- 25. ¿Debo usar int o UInt16?
- 26. ¿Debo usar doble o flotar?
- 27. Debo usar DataInputStream o BufferedInputStream
- 28. ¿Debo usar Meteor.startup() o $ (function() {})
- 29. ¿Debo usar AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory?
- 30. javascript encodeURIComponent y convertir espacios en + símbolos
También vea http://stackoverflow.com/a/3608791/632951 – Pacerier
Una diferencia importante es que 'encodeURI' no codificará'/'así que:' encodeURIComponent ("ac/dc") '=>' ac % 2Fdc' y 'encodeURI (" ac/dc ")' => 'ac/dc' – JoeRocc