Codificador de URL
Codifica texto que tiene que ir en una dirección web, o convierte una dirección codificada en texto legible.
0 caracteres · 0 bytes
Resultado
Como un solo componente, también se codifican las barras y los signos de interrogación. Sin la casilla marcada, la estructura de la dirección se conserva y solo se escapan los caracteres no permitidos.
Cómo funciona
Las direcciones web solo pueden contener un conjunto limitado de caracteres. Todo lo demás se escribe como un signo de porcentaje seguido del valor del carácter en hexadecimal, por eso un espacio se convierte en %20.
La diferencia entre los dos modos es qué se considera estructura. Al codificar un solo componente también se codifican las barras, los signos de interrogación y los signos igual, porque de lo contrario se leerían como partes de la dirección.
Al codificar una dirección completa, esos caracteres se dejan tal cual para que la estructura se conserve. Usa ese modo con una dirección terminada que solo contiene algunos caracteres que hay que escapar.
Si eliges el modo equivocado para un parámetro, el receptor puede leer un valor como varios. Un valor que va detrás de un signo igual casi siempre debe codificarse como un solo componente.
El signo más es una trampa: en la parte de la consulta de una dirección significa históricamente un espacio, mientras que en la ruta significa un signo más de verdad.
Las funciones detrás de los modos
El modo de componente usa encodeURIComponent y decodeURIComponent de JavaScript, y el modo de dirección completa, encodeURI y decodeURI; las cuatro están definidas en el estándar ECMAScript. Cada carácter que hay que codificar se convierte primero en UTF-8, y cada byte se escribe como un signo de porcentaje y dos dígitos hexadecimales. Como componente, jalapeño & café se convierte por eso en jalape%C3%B1o%20%26%20caf%C3%A9. Como dirección completa, el signo & se queda: jalape%C3%B1o%20&%20caf%C3%A9. Un carácter que no se puede escribir en UTF-8, como la mitad suelta de un par sustituto que dejó una copia rota, da un mensaje de error en lugar de un resultado.
Caracteres que nunca se codifican
ECMAScript deja sin codificar en los dos modos las letras A–Z y a–z, los dígitos, el guion bajo, el guion, el punto, el signo de exclamación, la tilde (~), el asterisco, el apóstrofo y los paréntesis. El RFC 3986 solo considera no reservados el guion, el punto, el guion bajo y la tilde; el signo de exclamación, el apóstrofo, los paréntesis y el asterisco son delimitadores reservados y pueden tener un significado en algunas direcciones.
El modo de dirección completa también deja como están el punto y coma, la barra, el signo de interrogación, los dos puntos, la arroba, el signo &, el signo igual, el signo más, el signo de pesos, la coma y el signo #. Los corchetes, en cambio, sí se codifican, así que una dirección IPv6 en una URL, como http://[::1]:8080/, se convierte en http://%5B::1%5D:8080/.
Signos más y formularios
Los formularios se codifican como application/x-www-form-urlencoded, donde el URL Standard de WHATWG escribe el espacio como signo más y además codifica el signo de exclamación, el apóstrofo, los paréntesis y la tilde. La herramienta siempre escribe %20, y al decodificar no convierte el signo más en espacio: a+b se queda como a+b. Si el texto viene de un formulario, cambia primero los signos más por espacios.
Errores al decodificar
Decodificar exige UTF-8 válido. %F1, que es la ñ en la codificación Latin-1, más antigua, da el mensaje de error, mientras que %C3%B1 da ñ. Un signo de porcentaje que no va seguido de dos dígitos hexadecimales, como en a%zz, también es un error. En el modo de dirección completa, los delimitadores codificados se dejan como están: a%2Fb se queda como a%2Fb, porque una barra decodificada cambiaría la estructura de la dirección.