Whiz Tools

Codificador de String de URL

Ferramenta de Escape de Strings de URL

Introdução

No campo do desenvolvimento web e das comunicações na Internet, as URLs (Localizadores Uniformes de Recursos) desempenham um papel crucial na identificação de recursos na web. No entanto, as URLs têm restrições sobre os caracteres que podem conter. Certos caracteres têm significados especiais, enquanto outros são inseguros para uso em URLs devido à possibilidade de interpretação errônea ou corrupção durante a transmissão.

A codificação de URL, também conhecida como percent-encoding, é um mecanismo para converter caracteres especiais em um formato que pode ser transmitido pela Internet. Esta ferramenta permite que você insira uma string de URL e escape caracteres especiais, garantindo que a URL seja válida e possa ser interpretada corretamente por navegadores e servidores web.

Entendendo a Codificação de URL

O que é Codificação de URL?

A codificação de URL envolve substituir caracteres ASCII inseguros por um % seguido de dois dígitos hexadecimais representando o código ASCII do caractere. Isso garante que as informações sejam transmitidas pela Internet sem alteração.

Por exemplo, o caractere de espaço ' ' é substituído por %20.

Por que a Codificação de URL é Necessária?

As URLs só podem ser enviadas pela Internet usando o conjunto de caracteres ASCII. Como as URLs frequentemente contêm caracteres fora desse conjunto, elas devem ser convertidas em um formato ASCII válido. A codificação de URL garante que caracteres especiais não causem efeitos ou erros indesejados em solicitações web.

Caracteres que Precisam de Codificação

De acordo com a especificação RFC 3986, os seguintes caracteres são reservados em URLs e devem ser percent-encoded se forem usados literalmente:

  • Delimitadores gerais: :, /, ?, #, [, ], @
  • Sub-delimitadores: !, $, &, ', (, ), *, +, ,, ;, =

Além disso, quaisquer caracteres não ASCII, incluindo caracteres em Unicode, devem ser codificados.

Como Funciona a Codificação de URL?

O Processo de Codificação

  1. Identificar Caracteres Especiais: Analise a string de URL e identifique caracteres que não são caracteres ASCII não reservados (letras, dígitos, -, ., _, ~).

  2. Converter para Código ASCII: Para cada caractere especial, obtenha seu ponto de código ASCII ou Unicode.

  3. Converter para Sequência de Bytes UTF-8 (se necessário): Para caracteres não ASCII, codifique o caractere em um ou mais bytes usando a codificação UTF-8.

  4. Converter para Hexadecimal: Converta cada byte para seu equivalente hexadecimal de dois dígitos.

  5. Prefixar com o Símbolo de Percentagem: Anteponha cada byte hexadecimal com um sinal de %.

Exemplo de Codificação

  • Caractere: ' ' (Espaço)

    • Código ASCII: 32
    • Hexadecimal: 20
    • Codificado em URL: %20
  • Caractere: 'é'

    • Codificação UTF-8: 0xC3 0xA9
    • Codificado em URL: %C3%A9

Casos Limite a Considerar

  • Caracteres Unicode: Caracteres não ASCII devem ser codificados em UTF-8 e, em seguida, percent-encoded.

  • Sinais de Percentagem Já Codificados: Sinais de porcentagem que fazem parte de percent-encodings não devem ser re-codificados.

  • Caracteres Reservados em Strings de Consulta: Certos caracteres têm significados especiais em strings de consulta e devem ser codificados para evitar alterar a estrutura.

Decodificação de URL

O que é Decodificação de URL?

A decodificação de URL é o processo reverso da codificação de URL. Ela converte caracteres percent-encoded de volta para sua forma original, tornando a URL legível e interpretável por humanos e sistemas.

Processo de Decodificação

  1. Identificar Sequências de Percent-Encoding: Localize todos os símbolos % seguidos por dois dígitos hexadecimais na string de URL.

  2. Converter Hexadecimal em Bytes: Traduza cada valor hexadecimal para seu byte correspondente.

  3. Decodificar Bytes UTF-8 (se necessário): Para sequências de múltiplos bytes, combine os bytes e decodifique-os usando a codificação UTF-8 para obter o caractere original.

  4. Substituir Sequências Codificadas: Substitua as sequências percent-encoded pelos caracteres decodificados.

Exemplo de Decodificação

  • Codificado: hello%20world

    • %20 traduz-se para um espaço ' '
    • Decodificado: hello world
  • Codificado: J%C3%BCrgen

    • %C3%A4 traduz-se para 'ü' em UTF-8
    • Decodificado: Jürgen

Importância da Decodificação de URL

A decodificação de URL é essencial ao processar entradas de usuários a partir de URLs, ler parâmetros de consulta ou interpretar dados recebidos de solicitações web. Ela garante que as informações extraídas de uma URL estejam em sua forma adequada e pretendida.

Casos de Uso

Desenvolvimento Web

  • Parâmetros de Consulta: Codificando entradas de usuários em parâmetros de consulta para evitar erros ou vulnerabilidades de segurança.

  • Parâmetros de Caminho: Incluindo dados dinâmicos de forma segura em caminhos de URL.

Transmissão de Dados

  • APIs e Serviços Web: Garantindo que os dados enviados para APIs estejam formatados corretamente.

  • Internacionalização: Suportando URLs com caracteres de várias línguas.

Segurança

  • Prevenindo Ataques de Injeção: Codificando entradas para mitigar o risco de scripts entre sites (XSS) e outros ataques de injeção.

Alternativas

Embora a codificação de URL seja essencial, existem cenários em que outros métodos de codificação podem ser mais apropriados:

  • Codificação Base64: Usada para codificar dados binários dentro de URLs ou quando uma maior densidade de informações é necessária.

  • Codificação UTF-8 sem Percent-Encoding: Alguns sistemas usam codificação UTF-8 diretamente, mas isso pode causar problemas se não for tratado corretamente.

Considere as especificidades de sua aplicação para escolher o método de codificação mais adequado.

História

A codificação de URL foi introduzida com as especificações iniciais dos padrões de URL e URI (Identificador Uniforme de Recursos) na década de 1990. A necessidade de uma maneira consistente de codificar caracteres especiais surgiu dos diversos sistemas e conjuntos de caracteres usados em todo o mundo.

Marcos importantes incluem:

  • RFC 1738 (1994): Definiu URLs e introduziu percent-encoding.

  • RFC 3986 (2005): Atualizou a sintaxe URI, refinando as regras para codificação.

Com o tempo, a codificação de URL tornou-se parte integrante das tecnologias web, garantindo comunicação confiável entre diferentes sistemas e plataformas.

Exemplos de Código

Aqui estão exemplos de como realizar a codificação de URL em várias linguagens de programação:

' Exemplo em Excel VBA
Function URLEncode(ByVal Text As String) As String
    Dim i As Integer
    Dim CharCode As Integer
    Dim Char As String
    Dim EncodedText As String

    For i = 1 To Len(Text)
        Char = Mid(Text, i, 1)
        CharCode = AscW(Char)
        Select Case CharCode
            Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 ' 0-9, A-Z, a-z, -, ., _, ~
                EncodedText = EncodedText & Char
            Case Else
                If CharCode < 0 Then
                    ' Lidar com caracteres Unicode
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

' Uso:
' =URLEncode("https://example.com/?name=Jürgen")
% Exemplo em MATLAB
function encodedURL = urlEncode(url)
    import java.net.URLEncoder
    encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
end

% Uso:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Exemplo em Ruby
require 'uri'

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## Saída: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Exemplo em Rust
use url::form_urlencoded;

fn main() {
    let url = "https://example.com/path?query=hello world&name=Jürgen";
    let encoded_url = percent_encode(url);
    println!("{}", encoded_url);
    // Saída: https://example.com/path%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
}

fn percent_encode(input: &str) -> String {
    use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
    utf8_percent_encode(input, NON_ALPHANUMERIC).to_string()
}
## Exemplo em Python
import urllib.parse

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## Saída: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Exemplo em JavaScript
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Saída: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Exemplo em Java
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class URLEncodeExample {
    public static void main(String[] args) throws Exception {
        String url = "https://example.com/path?query=hello world&name=Jürgen";
        String encodedURL = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
        // Substituir "+" por "%20" para espaços
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Saída: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// Exemplo em C#
using System;
using System.Net;

class Program
{
    static void Main()
    {
        string url = "https://example.com/path?query=hello world&name=Jürgen";
        string encodedURL = Uri.EscapeUriString(url);
        Console.WriteLine(encodedURL);
        // Saída: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// Exemplo em PHP
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Saída: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Exemplo em Go
package main

import (
    "fmt"
    "net/url"
)

func main() {
    urlStr := "https://example.com/path?query=hello world&name=Jürgen"
    encodedURL := url.QueryEscape(urlStr)
    fmt.Println(encodedURL)
    // Saída: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Exemplo em Swift
import Foundation

let url = "https://example.com/path?query=hello world&name=Jürgen"
if let encodedURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    print(encodedURL)
    // Saída: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
}
## Exemplo em R
url <- "https://example.com/path?query=hello world&name=Jürgen"
encodedURL <- URLencode(url, reserved = TRUE)
print(encodedURL)
## Saída: https://example.com/path?query=hello%20world&name=J%C3%BCrgen

Nota: A saída pode variar ligeiramente com base em como cada linguagem lida com caracteres reservados e espaços (por exemplo, codificando espaços como %20 ou +).

Diagrama SVG do Processo de Codificação de URL

Processo de Codificação de URL URL Original Identificar Especiais Caracteres Codificar URL Exemplo: Entrada: https://example.com/über uns Saída: https://example.com/%C3%BCber%20uns

Considerações de Segurança

A codificação e decodificação adequadas de URL são críticas para a segurança:

  • Prevenir Ataques de Injeção: Codificar entradas de usuários ajuda a evitar que códigos maliciosos sejam executados, mitigando riscos como scripts entre sites (XSS) e injeção SQL.

  • Integridade dos Dados: Garante que os dados sejam transmitidos sem alteração ou corrupção.

  • Conformidade com Padrões: Cumprir os padrões de codificação evita problemas de interoperabilidade entre sistemas.

Referências

  1. RFC 3986 - Identificador Uniforme de Recursos (URI): https://tools.ietf.org/html/rfc3986
  2. O que é Codificação de URL e como funciona? https://www.urlencoder.io/learn/
  3. Percent-encoding: https://pt.wikipedia.org/wiki/Codifica%C3%A7%C3%A3o_por_porcentagem
  4. Padrão de URL: https://url.spec.whatwg.org/
  5. URI.escape está obsoleto: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Conclusão

A codificação de URL é um aspecto essencial do desenvolvimento web e das comunicações na Internet. Ao converter caracteres especiais em um formato seguro, ela garante que as URLs sejam corretamente interpretadas por navegadores e servidores, mantendo a integridade e segurança da transmissão de dados. Esta ferramenta fornece uma maneira conveniente de escapar caracteres especiais em suas URLs, melhorando a compatibilidade e prevenindo potenciais erros ou vulnerabilidades de segurança.

Feedback