Skip to main content

Percent encoding de parâmetros

Partes da X API, particularmente as que envolvem assinaturas OAuth, exigem que as strings sejam codificadas conforme a RFC 3986, Seção 2.1. Como muitas implementações de algoritmos de URL encoding não são totalmente compatíveis com a RFC 3986, codificações incorretas são causa de muitos erros de assinatura OAuth. Por esse motivo, o algoritmo exato de assinatura é abordado nesta página. Esta página cobre o processo de URL encoding descrito na RFC 3986, Seção 2.1. Recomendamos consultar essa especificação em caso de qualquer ambiguidade ou conflito com este documento.

Codificando uma string

O algoritmo a seguir pressupõe que você esteja codificando uma string SRC copiando seus valores byte a byte para uma string DST. Passo 1: enquanto SRC contiver bytes não lidos, leia o próximo byte (8 bits) de SRC. Normalmente isso é considerado um caractere, mas em codificações em que um caractere pode ter mais de um byte (como UTF-8), leia apenas o primeiro byte. Passo 2: verifique se o byte lido corresponde a algum dos equivalentes ASCII a seguir. A tabela abaixo foi dividida em linhas para facilitar a leitura, mas você só precisa determinar se o byte lido existe na tabela, não a linha específica. Passo 2b: se o byte não estiver listado na tabela acima, continue. Qualquer outro valor deve ser codificado. Passo 2a: se o byte estiver listado na tabela acima, copie-o para DST e volte ao Passo 1. Caracteres listados na tabela acima não precisam ser escapados, então basta copiar o byte diretamente. Passo 3: escreva o caractere ‘%’ em DST. O caractere de porcentagem ‘%’ (ou 0x25 em hex e 00100101 em binário) indica que os próximos dois bytes representarão um byte codificado. Passo 4: escreva em DST dois caracteres representando o valor hexadecimal em ASCII maiúsculo do byte atual. Isso é um pouco confuso, então aqui vai um exemplo. Suponha que o byte atual seja 0xE6 (11100110 em binário). Isso corresponde ao valor codificado em UTF-8 de ‘æ’. Para codificar esse valor, escreva o caractere ‘E’ (0x45, conforme a tabela acima) e depois o caractere ‘6’ (0x36) em DST. Os três últimos caracteres escritos devem ser “%E6”. Observe que, se você escrever uma letra como A, B, C, D, E ou F, deve usar o caractere maiúsculo. Passo 5: volte ao Passo 1. Continue até que todo o conteúdo de SRC seja copiado para DST.

Exemplos

Os exemplos a seguir podem ajudar a comparar com a saída do seu próprio código. Considere qualquer diferença como um erro. Espaços codificados como caracteres “+” são um exemplo de codificação incorreta.