Ferramenta de Codificação/Decodificação de URL

Perguntas Frequentes

O que é codificação de URL?

A codificação de URL é um método para converter caracteres em um formato que pode ser transmitido pela Internet. As URLs só podem ser enviadas pela Internet usando o conjunto de caracteres ASCII. Como as URLs frequentemente contêm caracteres fora do conjunto ASCII, eles precisam ser convertidos. A codificação de URL substitui caracteres ASCII inseguros por um '%' seguido por dois dígitos hexadecimais.

Como funciona a codificação de URL?

A codificação de URL funciona substituindo caracteres inseguros por um '%' seguido de dois dígitos hexadecimais que representam a codificação UTF-8 do caractere. Por exemplo, o caractere de espaço é codificado como %20. URLs não podem conter espaços, então eles são substituídos por um sinal de mais (+) ou %20. Outros caracteres especiais são substituídos pelos seus códigos %xx correspondentes.

Caracteres comuns que precisam de codificação de URL

Os seguintes caracteres precisam de codificação de URL quando usados em URLs:

CaractereURL CodificadoDescrição
Space%20Caractere mais comum que requer codificação de URL
!%21Ponto de exclamação
"%22Aspas duplas
#%23Símbolo de hashtag (usado para fragmentos de URL)
$%24Símbolo de dólar
%%25Símbolo de porcentagem (caractere de escape da codificação URL)
&%26E comercial (usado para separação de parâmetros de URL)
'%27Aspas simples
(%28Parêntese de abertura
)%29Parêntese de fechamento
+%2BSinal de mais
,%2CVírgula
/%2FBarra (separador de caminho URL)
=%3DSinal de igual (atribuição de parâmetro URL)
?%3FPonto de interrogação (início da string de consulta URL)

Implementação de codificação de URL em diferentes linguagens de programação

Aqui estão exemplos de codificação e decodificação de URL em várias linguagens de programação:

Go

package main

import (
    "fmt"
    "net/url"
)

func main() {
    // Encode a URL
    text := "Hello World! Special chars: &?=/";
    encoded := url.QueryEscape(text)
    fmt.Println("Encoded:", encoded)

    // Decode a URL
    decoded, err := url.QueryUnescape(encoded)
    if err == nil {
        fmt.Println("Decoded:", decoded)
    }
}

C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// Function to URL-encode a string
char *url_encode(char *str) {
    char *encoded = malloc(strlen(str) * 3 + 1);
    char *pstr = str;
    char *pbuf = encoded;

    while (*pstr) {
        if (isalnum(*pstr) || *pstr == '-' || *pstr == '_' || *pstr == '.' || *pstr == '~') {
            *pbuf++ = *pstr;
        } else if (*pstr == ' ') {
            *pbuf++ = '+';
        } else {
            sprintf(pbuf, "%%%.2X", *pstr);
            pbuf += 3;
        }
        pstr++;
    }
    *pbuf = '\\0';

    return encoded;
}

int main() {
    char *text = "Hello World! Special chars: &?=/";
    char *encoded = url_encode(text);

    printf("Original: %s\\n", text);
    printf("Encoded: %s\\n", encoded);

    free(encoded);
    return 0;
}

PHP

<?php
// URL encoding
$text = "Hello World! Special chars: &?=/";
$encoded = urlencode($text);
echo "Encoded: " . $encoded . "\\n";

// URL decoding
$decoded = urldecode($encoded);
echo "Decoded: " . $decoded . "\\n";
?>

Python

import urllib.parse

# URL encoding
text = "Hello World! Special chars: &?=/"
encoded = urllib.parse.quote(text)
print(f"Encoded: {encoded}")

# URL decoding
decoded = urllib.parse.unquote(encoded)
print(f"Decoded: {decoded}")

JavaScript

// URL encoding
const text = "Hello World! Special chars: &?=/";
const encoded = encodeURIComponent(text);
console.log("Encoded:", encoded);

// URL decoding
const decoded = decodeURIComponent(encoded);
console.log("Decoded:", decoded);

TypeScript

// URL encoding
const text: string = "Hello World! Special chars: &?=/";
const encoded: string = encodeURIComponent(text);
console.log("Encoded:", encoded);

// URL decoding
const decoded: string = decodeURIComponent(encoded);
console.log("Decoded:", decoded);

Qual é a diferença entre encodeURI e encodeURIComponent?

encodeURI() é projetado para codificar um URI completo, então não codifica caracteres que têm significado especial em uma URL, como /, ?, :, @, &, =, +, $ e #. Em contraste, encodeURIComponent() codifica todos os caracteres especiais, tornando-o adequado para codificar partes de uma URL, como parâmetros de consulta. Ao codificar parâmetros de consulta, sempre use encodeURIComponent() para garantir que todos os caracteres especiais sejam codificados corretamente.