Guía

Cómo funciona el percent-encoding de una URL

Aprende qué caracteres codificar en un componente URL, cómo se transforma UTF-8 y por qué + no siempre significa espacio.

por Tools in a Tab · Publicado el · Revisado el

Respuesta breve

El percent-encoding representa un byte mediante % y dos cifras hexadecimales. Permite incluir datos en un componente URI sin confundirlos con separadores estructurales.

texto:      café & té
componente: caf%C3%A9%20%26%20t%C3%A9

é se codifica primero como los bytes UTF-8 C3 A9, que se escriben %C3%A9. El espacio es %20 y & pasa a %26 para que no se interprete como separador de parámetros.

Caracteres no reservados y reservados

La RFC 3986 define como no reservadas las letras, dígitos, -, ., _ y ~. Los reservados pueden tener función sintáctica, como :, /, ?, #, [, ] y @, o separar subcomponentes, como & y =.

No debes codificar toda una URL completa como si fuera un único valor: hacerlo convertiría también /, ? y otros delimitadores necesarios. Codifica por separado el nombre o valor que insertas.

El codificador URL trabaja con un componente y UTF-8, no con la estructura completa de una URL.

El caso de +

En el formato de formularios application/x-www-form-urlencoded, un espacio suele representarse como +. En percent-encoding URI general, el espacio es %20 y un + literal sigue siendo + salvo que la capa de formulario aplique su regla. Conoce qué decodificador recibirá el dato.

Errores frecuentes

  • Codificar dos veces %C3%A9 y obtener %25C3%25A9.
  • Decodificar antes de separar componentes y convertir datos en estructura.
  • Usar Base64 estándar dentro de una URL sin tratar +, / y =.
  • Aceptar secuencias % incompletas o bytes que no formen UTF-8.

Conserva separadas la construcción de la URL, la codificación de componentes y la serialización de formularios. Son capas relacionadas, pero no idénticas.