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:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 - _ . ~
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:
function purlencoding($x)
{ return preg_replace('/[\\x80-\\xff \'"<>]/e', "'%'.dechex(ord('$0'))", $x); }
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.
Tente outros textos e aperte o botão enviar.
Exemplos de URL encoding
| Character | URL-encoding |
|---|---|
| € | %80 |
| £ | %A3 |
| © | %A9 |
| ® | %AE |
HTML Básico
- Capa
- Índice
- Introdução
- Começo
- Básico
- Elementos
- Atributos
- Títulos
- Parágrafos
- Formatação
- Fontes
- Estilos
- Links
- Imagens
- Tabelas
- Listas
- Formulários
- Frames
- Iframes
- Cores
HTML Avançado
HTML Media
XHTML
HTML5
HTML Referências