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 un solo componente usa encodeURIComponent y decodeURIComponent de JavaScript, y el de dirección completa, encodeURI y decodeURI, las cuatro definidas en la norma ECMAScript. Cada carácter que hay que codificar se convierte primero a UTF-8, y cada byte se escribe como un signo de porcentaje y dos cifras hexadecimales. Como componente, jamón & queso 5 € pasa a ser jam%C3%B3n%20%26%20queso%205%20%E2%82%AC. Como dirección completa, el signo & se queda: jam%C3%B3n%20&%20queso%205%20%E2%82%AC. Un carácter que no se puede escribir en UTF-8, como la mitad suelta de un par sustituto que deja 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, las cifras, el guion bajo, el guion, el punto, el signo de exclamación, la virgulilla (~), 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 virgulilla; el signo de exclamación, el apóstrofo, los paréntesis y el asterisco pertenecen a los delimitadores reservados y pueden tener significado en algunas direcciones.
El modo de dirección completa deja además intactos 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 dólar, la coma y la almohadilla. Los corchetes, en cambio, se codifican, así que una dirección IPv6 en una URL, como http://[::1]:8080/, pasa a ser http://%5B::1%5D:8080/.
Signos más y formularios
Los formularios se codifican como application/x-www-form-urlencoded, donde el URL Standard del WHATWG escribe el espacio como un signo más y codifica además el signo de exclamación, el apóstrofo, los paréntesis y la virgulilla. La herramienta escribe siempre %20, y al decodificar no convierte un signo más en espacio: a+b se queda como a+b. Si el texto viene de un formulario, cambia antes los signos más por espacios.
Errores al decodificar
Decodificar exige UTF-8 válido. %F3, que es la ó en la antigua codificación Latin-1, da el mensaje de error, mientras que %C3%B3 da ó. Un signo de porcentaje que no va seguido de dos cifras hexadecimales, como en %zz o al final del texto, 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.