Codex

< URLs | Índice | Webserver >

URL encoding ou percent encoding, é uma maneira de codificar caracteres de uso reservado em URLs.


URL - Uniform Resource Locator

Os browsers fazem pedidos por páginas para um servidor web, usando uma URL.

O endereço de URL é o endereço de uma página web, como: http://www.google.com.


URL Encoding

URLs só podem ser transmitidas pela internet sem nenhum encoding, usando parcialmente a tabela de caracteres ASCII.

Os caracteres permitidos sem encoding são:

Os caracteres reservados são:

Existe ainda o propósito reservado, que é quando uma um caractere reservado serve um propósito reservado, como quando uma barra invertida está delimitando o caminho, através dos diretórios, até um arquivo.

Quando um caractere reservado não estiver cumprindo seu propósito reservado, este deve ser codificado com percent encoding.

URL encoding substitui caracteres reservados com "%" seguido de dois dígitos hexadecimais, ou "%AE", chamados infomalmente de de triplets em inglês, ou trio, ou ainda terceto em português (não é muito usado).

Para caracteres em utf-8, estes são convertidos como uma sequência de bytes e depois serão convertidos para o formato percent encoded ou codificação de percentagem.

O assunto de url encoding é razoavelmente complexo, pois uma URL é pode ser formada por várias partes diferentes e cada parte precisa de cuidado especial na codificação por percentagem.

Basicamente as confusões acontecem quando misturamos os três principais tópicos envolvidos em url encoding que são:

  • Formatação de uma url de acordo com os RFCs
  • Codificação da url para envio através de query para o servidor, ou ainda o envio através de formulários.
  • Encapsulamento/colocação de uma url em uma tag do html.

No php existem duas funcões principais para encoding de URLs, que são : urlencode e rawurlencode.

A diferença entre as duas é que:

  • urlencode codifica de acordo com application/x-www-form-urlencoded (espaços se transformam em +)
  • rawurlencode codifica de acordo com a codificação por percentagem (espaços são codificados como %20).

Cada uma dessas funções é usada em partes diferentes da url, vejamos um exemplo sobre cada parte de uma url.

Os RFCs que regulam como usar percent encoding, caracteres reservados e não reservados e entre outras tantas dúvidas, podem ser encontrados em:

  • RFC 1738
  • RFC 2396
  • RFC 2732
  • RFC 3986
  • RFC 3987

A maioria das linguagens tenta ser compatível com o RFC3986.

Uma das soluções rápidas, não completamente de acordo com os RFCs, mas que funciona na maioria das urls, é a função de url encoding do http://pmwiki.org, que segue:


Se você clicar no botão "enviar" abaixo, o browser irá codificar a entrada depois de enviar para o servidor. Você verá seu texto codificado logo abaixo.

Texto:

%7B%24%3Ftexto%7D

Tente outros textos e aperte o botão enviar.


Exemplos de URL encoding

Character URL-encoding
%80
£ %A3
© %A9
® %AE


< URLs | Índice | Webserver >