Qué hace la codificación por porcentaje
Las URL admiten solo un conjunto limitado de caracteres. Todo lo demás se convierte en bytes UTF-8 y cada byte se escribe como un signo de porcentaje y dos dígitos hexadecimales. Un espacio pasa a %20, la é a %C3%A9, y un carácter chino, japonés o coreano, que ocupa tres bytes, a nueve caracteres.
Esta herramienta distingue entre codificar una dirección entera y codificar un solo valor. En una dirección entera los caracteres estructurales como las barras y los signos de interrogación deben sobrevivir; en un solo valor, por ejemplo un término de búsqueda, esos mismos caracteres también deben codificarse o el parámetro se partirá.
La descodificación hace el camino inverso, devolviendo cada tríada de porcentaje a un byte y leyendo el resultado como UTF-8. Se usa sobre todo para recuperar el término de búsqueda original a partir de una dirección registrada en un log o en un referente.
Elegir mal el alcance de la codificación
Codificar un solo valor como si fuera una dirección entera trunca el parámetro. Si un término de búsqueda contiene un ampersand y se deja intacto, el servidor lee un parámetro nuevo a partir de ahí. Los valores de consulta necesitan la codificación a nivel de componente.
Lo contrario también falla: codificar una dirección entera a nivel de componente reescribe las barras y los dos puntos, y el enlace deja de abrirse. La codificación de componente es la correcta cuando una URL terminada viaja dentro de otra URL como parámetro, y la equivocada cuando el resultado va directo a la barra de direcciones.
Codificar por segunda vez una cadena ya codificada convierte cada signo de porcentaje en %25 y produce una doble capa. Ver varias apariciones de %25 en la salida casi siempre significa que pasó esto, y recuperar el original exige entonces dos rondas de descodificación.