Whiz Tools

Échappement de chaîne URL

Outil d'échappement de chaînes URL

Introduction

Dans le domaine du développement web et des communications Internet, les URL (Uniform Resource Locators) jouent un rôle crucial dans l'identification des ressources sur le web. Cependant, les URL ont des restrictions sur les caractères qu'elles peuvent contenir. Certains caractères ont des significations spéciales, tandis que d'autres sont dangereux à utiliser dans les URL en raison de la possibilité de mauvaise interprétation ou de corruption lors de la transmission.

L'encodage URL, également connu sous le nom d'encodage pourcentage, est un mécanisme permettant de convertir des caractères spéciaux en un format pouvant être transmis sur Internet. Cet outil vous permet de saisir une chaîne URL et d'échapper les caractères spéciaux, garantissant que l'URL est valide et peut être interprétée correctement par les navigateurs web et les serveurs.

Comprendre l'encodage URL

Qu'est-ce que l'encodage URL ?

L'encodage URL consiste à remplacer les caractères ASCII non sûrs par un % suivi de deux chiffres hexadécimaux représentant le code ASCII du caractère. Cela garantit que les informations sont transmises sur Internet sans altération.

Par exemple, le caractère d'espace ' ' est remplacé par %20.

Pourquoi l'encodage URL est-il nécessaire ?

Les URL ne peuvent être envoyées sur Internet qu'en utilisant l'ensemble de caractères ASCII. Étant donné que les URL contiennent souvent des caractères en dehors de cet ensemble, elles doivent être converties en un format ASCII valide. L'encodage URL garantit que les caractères spéciaux ne provoquent pas d'effets ou d'erreurs indésirables dans les requêtes web.

Caractères nécessitant un encodage

Selon la spécification RFC 3986, les caractères suivants sont réservés dans les URL et doivent être encodés en pourcentage s'ils doivent être utilisés littéralement :

  • Délimiteurs généraux : :, /, ?, #, [, ], @
  • Sous-délimiteurs : !, $, &, ', (, ), *, +, ,, ;, =

De plus, tout caractère non ASCII, y compris les caractères Unicode, doit être encodé.

Comment fonctionne l'encodage URL ?

Le processus d'encodage

  1. Identifier les caractères spéciaux : Analyser la chaîne URL et identifier les caractères qui ne sont pas des caractères ASCII non réservés (lettres, chiffres, -, ., _, ~).

  2. Convertir en code ASCII : Pour chaque caractère spécial, obtenir son code point ASCII ou Unicode.

  3. Convertir en séquence d'octets UTF-8 (si nécessaire) : Pour les caractères non ASCII, encoder le caractère en un ou plusieurs octets en utilisant l'encodage UTF-8.

  4. Convertir en hexadécimal : Convertir chaque octet en son équivalent hexadécimal à deux chiffres.

  5. Préfixer avec le symbole de pourcentage : Précéder chaque octet hexadécimal d'un signe %.

Exemple d'encodage

  • Caractère : ' ' (espace)

    • Code ASCII : 32
    • Hexadécimal : 20
    • Encodé URL : %20
  • Caractère : 'é'

    • Encodage UTF-8 : 0xC3 0xA9
    • Encodé URL : %C3%A9

Cas particuliers à considérer

  • Caractères Unicode : Les caractères non ASCII doivent être encodés en UTF-8 puis encodés en pourcentage.

  • Signes de pourcentage déjà encodés : Les signes de pourcentage qui font partie des encodages en pourcentage ne doivent pas être réencodés.

  • Caractères réservés dans les chaînes de requête : Certains caractères ont des significations spéciales dans les chaînes de requête et doivent être encodés pour éviter d'altérer la structure.

Décodage URL

Qu'est-ce que le décodage URL ?

Le décodage URL est le processus inverse de l'encodage URL. Il convertit les caractères encodés en pourcentage dans leur forme originale, rendant l'URL lisible et interprétable par les humains et les systèmes.

Processus de décodage

  1. Identifier les séquences d'encodage en pourcentage : Localiser tous les symboles % suivis de deux chiffres hexadécimaux dans la chaîne URL.

  2. Convertir l'hexadécimal en octets : Traduire chaque valeur hexadécimale en son octet correspondant.

  3. Décoder les octets UTF-8 (si nécessaire) : Pour les séquences multi-octets, combiner les octets et les décoder en utilisant l'encodage UTF-8 pour obtenir le caractère original.

  4. Remplacer les séquences encodées : Substituer les séquences encodées en pourcentage par les caractères décodés.

Exemple de décodage

  • Encodé : hello%20world

    • %20 se traduit par un espace ' '
    • Décodé : hello world
  • Encodé : J%C3%BCrgen

    • %C3%A4 se traduit par 'ü' en UTF-8
    • Décodé : Jürgen

Importance du décodage URL

Le décodage URL est essentiel lors du traitement des entrées utilisateur provenant des URL, de la lecture des paramètres de requête ou de l'interprétation des données reçues des requêtes web. Il garantit que les informations extraites d'une URL sont dans leur forme correcte et prévue.

Cas d'utilisation

Développement Web

  • Paramètres de requête : Encodage des entrées utilisateur dans les paramètres de requête pour éviter des erreurs ou des vulnérabilités de sécurité.

  • Paramètres de chemin : Inclusion sécurisée des données dynamiques dans les chemins d'URL.

Transmission de données

  • API et services web : Assurer que les données envoyées aux API sont correctement formatées.

  • Internationalisation : Prise en charge des URL contenant des caractères de diverses langues.

Sécurité

  • Prévenir les attaques par injection : Encodage des entrées pour atténuer le risque de scripts intersites (XSS) et d'autres attaques par injection.

Alternatives

Bien que l'encodage URL soit essentiel, il existe des scénarios où d'autres méthodes d'encodage pourraient être plus appropriées :

  • Encodage Base64 : Utilisé pour encoder des données binaires dans les URL ou lorsque une densité d'information plus élevée est requise.

  • Encodage UTF-8 sans encodage en pourcentage : Certains systèmes utilisent directement l'encodage UTF-8, mais cela peut entraîner des problèmes s'il n'est pas correctement géré.

Considérez les spécificités de votre application pour choisir la méthode d'encodage la plus appropriée.

Historique

L'encodage URL a été introduit avec les premières spécifications des normes URL et URI (Uniform Resource Identifier) dans les années 1990. Le besoin d'une manière cohérente d'encoder des caractères spéciaux est né des systèmes et ensembles de caractères divers utilisés dans le monde entier.

Les étapes clés incluent :

  • RFC 1738 (1994) : Défini les URL et introduit l'encodage en pourcentage.

  • RFC 3986 (2005) : Mis à jour la syntaxe URI, affinant les règles d'encodage.

Au fil du temps, l'encodage URL est devenu essentiel aux technologies web, garantissant une communication fiable entre différents systèmes et plateformes.

Exemples de code

Voici des exemples de la façon d'effectuer l'encodage URL dans divers langages de programmation :

' Exemple 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
                    ' Gérer les caractères Unicode
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

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

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

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## Sortie : https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Exemple 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);
    // Sortie : 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()
}
## Exemple 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)
## Sortie : https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Exemple JavaScript
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Sortie : https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Exemple 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());
        // Remplacer "+" par "%20" pour les espaces
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Sortie : https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// Exemple 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);
        // Sortie : https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// Exemple PHP
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Sortie : https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Exemple 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)
    // Sortie : https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Exemple Swift
import Foundation

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

Remarque : La sortie peut varier légèrement en fonction de la manière dont chaque langage gère les caractères réservés et les espaces (par exemple, encoder les espaces en %20 ou +).

Diagramme SVG du processus d'encodage URL

Processus d'encodage URL URL originale Identifier les caractères spéciaux Encoder l'URL Exemple : Entrée : https://example.com/über uns Sortie : https://example.com/%C3%BCber%20uns

Considérations de sécurité

Un encodage et un décodage URL appropriés sont cruciaux pour la sécurité :

  • Prévenir les attaques par injection : L'encodage des entrées utilisateur aide à empêcher l'exécution de code malveillant, atténuant les risques tels que les scripts intersites (XSS) et les injections SQL.

  • Intégrité des données : Garantit que les données sont transmises sans altération ni corruption.

  • Conformité aux normes : Le respect des normes d'encodage évite les problèmes d'interopérabilité entre les systèmes.

Références

  1. RFC 3986 - Uniform Resource Identifier (URI) : https://tools.ietf.org/html/rfc3986
  2. Qu'est-ce que l'encodage URL et comment cela fonctionne-t-il ? https://www.urlencoder.io/learn/
  3. Encodage en pourcentage : https://en.wikipedia.org/wiki/Percent-encoding
  4. Norme URL : https://url.spec.whatwg.org/
  5. URI.escape est obsolète : https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Conclusion

L'encodage URL est un aspect essentiel du développement web et des communications Internet. En convertissant les caractères spéciaux en un format sûr, il garantit que les URL sont correctement interprétées par les navigateurs et les serveurs, maintenant l'intégrité et la sécurité de la transmission des données. Cet outil fournit un moyen pratique d'échapper aux caractères spéciaux dans vos URL, améliorant la compatibilité et prévenant d'éventuelles erreurs ou vulnérabilités de sécurité.

Commentaires