Codage/décodage d’URL avec sed

Il existe plusieurs façons d'encoder/décoder les URL. Les programmeurs utilisent généralement des fonctions prêtes à l'emploi. Mais savez-vous vraiment ce que font ces fonctions ? Pour cet article, j'ai choisi sed comme outil pour remplacer les codes et je vous indiquerai les RFC qui traitent du sujet.

Temps de lecture estimé : 4 minutes

Introduction

L’encodage URL doit être appliqué chaque fois qu’il est nécessaire d’utiliser un caractère réservé dans une URL. Mais quels sont ces caractères réservés et qui les a définis ?

Les caractères réservés sont explicitement décrits dans la RFC 3986 : https://datatracker.ietf.org/doc/html/rfc3986#section-2.2

Il s’agit de

reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

En d’autres termes :  » : » , « , » ,  » ? » , « # » , « [ » , « ] » , « @ »,  » ! » , « $ » , « & » , « ‘ » , « ( » , « ) », « * » , « + » , « , » ,  » ; » , « = »

Pour décoder, vous devez savoir que les codes hexadécimaux de la table ASCII sont utilisés. Consultez le tableau dans le manuel :

man ascii

Les URL codés affichent le % avant chaque nombre hexadécimal dans la table ASCII. Par conséquent, pour créer l’encodage, il suffit de remplacer le caractère réservé par %hexadécimal! =D

Considérez que votre shell lira et interprétera l’hexadécimal avec le code d’échappement correspondant. Pour bash, nous utiliserons \x. Regardez le tableau ci-dessus et faites vos propres tests. Pour l’exclamation !, le code est 21. Jetez un coup d’œil :

$ echo -e "\x21"
!

Remplacement par sed

Analysons une fonction simple avec sed pour effectuer le décodage :

    #!/bin/bash
    URL_DECODE="$(echo "$1" | sed -E 's/%([0-9a-fA-F]{2})/\\x\1/g;s/\+/ /g'"
    echo -e "$URL_DECODE"

[0-9a-fA-F]{2}Fondamentalement, la commande sed s/%( )/\x\1/g remplace tous les % par des \x, à condition que les 2 caractères suivants représentent un nombre hexadécimal (de 00 à FF). echo L’option -e de est alors activée pour interpréter cet hexadécimal. s/\+/ /g Oh, et la deuxième commande sed remplace tous les signes + par des espaces =). L’option -E de sed permet d’utiliser des expressions régulières modernes, afin d’éviter les nombreux caractères d’échappement qui perturbent la syntaxe.

Pour un script un peu plus sophistiqué, qui se charge également de l’encodage, nous utilisons plusieurs commandes sed à la suite.

Voir le code complet, qui inclut tous les caractères réservés de la RFC 3986 :

    #!/bin/bash
    #
    # Enconding e Decoding de URL com sed
    #
    # Por Daniel Cambría
    # [email protected]
    #
    # jul/2021

    function url_decode() {
    echo "$@" \
        | sed -E 's/%([0-9a-fA-F]{2})/\\x\1/g;s/\+/ /g'
    }

    function url_encode() {
        # Conforme RFC 3986
        echo "$@" \
        | sed \
        -e 's/ /%20/g' \
        -e 's/:/%3A/g' \
        -e 's/,/%2C/g' \
        -e 's/\?/%3F/g' \
        -e 's/#/%23/g' \
        -e 's/\[/%5B/g' \
        -e 's/\]/%5D/g' \
        -e 's/@/%40/g' \
        -e 's/!/%41/g' \
        -e 's/\$/%24/g' \
        -e 's/&/%26/g' \
        -e "s/'/%27/g" \
        -e 's/(/%28/g' \
        -e 's/)/%29/g' \
        -e 's/\*/%2A/g' \
        -e 's/\+/%2B/g' \
        -e 's/,/%2C/g' \
        -e 's/;/%3B/g' \
        -e 's/=/%3D/g'
    }

    echo -e "URL decode: " $(url_decode "$1")
    echo -e "URL encode: " $(url_encode "$1")

Note sur l’encodage des chaînes de requête

Le signe + apparaît souvent dans les URL pour remplacer l’espace. C’est le cas lorsque le texte se trouve dans une chaîne de requête. Voir cette section dans la RFC1866 : https://datatracker.ietf.org/doc/html/rfc1866#section-8.2.1

Mais pour tout autre codage HTML, vous devez utiliser le codage en pourcentage (codage URL).

Unicode

Bon, maintenant que vous avez compris la logique du truc, vous vous demandez sans doute : et si j’utilise des caractères accentués ?

Les accents ne figurent pas dans la table ASCII, mais dans la norme Unicode. Cette norme peut se présenter sous la forme d’UTF-8, d’UTF-16 et d’UTF-32 (UTF = Unicode Transformation Format, pour en savoir plus, consultez le site https://www.unicode.org/faq/utf_bom.html). Pour en savoir plus sur Unicode, consultez directement la source à l’adresse https://unicode.org/.

Si la valeur par défaut d’un nombre hexadécimal est \x, l’unicode est \u. Par exemple :

echo -e "\u2623"
printf "\u2623"
python -c 'print u"\u2623"'

Pour vérifier de quel code hexadécimal il s’agit, utilisez hexdump :

$ echo -en "☣" | hexdump
0000000 e2 98 a3

$ echo -e "\xe2\x98\xa3"
☣

Pour vérifier le code unicode à partir d’un code hexadécimal, cette partie du site Unicode qui consulte les tableaux de codes des caractères devrait suffire, mais elle n’accepte que l’hexadécimal UTF-16. Toutefois, il est possible de vérifier quel code Unicode correspond à l’hexadécimal UTF-8 grâce à la recherche effectuée par le site scarfboy. Consultez-le :

Unicode dans macOS bash

echo -e "\u2623"Sur MacOS, en raison de problèmes de licence logicielle avec bash à partir de la version 4.0, nous ne pouvons pas générer d’unicode comme ☣ avec . brew install bashMais vous pouvez installer la version la plus récente de bash 5+ en utilisant . Si vous n’avez jamais utilisé brew, il est très facile à installer, consultez le site de l’auteur https://brew.sh.Et dans cet autre article, la procédure pour faire du nouveau bash la version par défaut est très détaillée. Heureusement, les utilisateurs de Linux n’auront pas ce problème. =D

Si vous souhaitez générer une ENORME liste de caractères unicode, essayez le script ci-dessous. chmod +x N’oubliez pas de le sauvegarder dans un fichier et de lui donner le droit d’exécution avec . Si aucun caractère n’apparaît, relisez le paragraphe précédent et mettez à jour votre bash XD

#!/bin/bash
for y in $(seq 0 524287)
  do
  for x in $(seq 0 7)
  do
    a=$(expr $y \* 8 + $x)
    echo -ne "$a \\u$a "
  done
  echo
done

Voir aussi

Vous avez des questions ?
Postez-les dans les commentaires. À la prochaine fois !

Comentários

Plus d'articles

Comment utiliser bc, la calculatrice d’obus

bc = bench calculator (calculatrice de banc).
Si vous ne connaissez pas encore la calculatrice de votre coquille, il est temps d’apprendre à vous en servir, même si son utilisation est très basique.
L’utilisation la plus triviale de ses fonctions devrait déjà répondre à la plupart de vos besoins.
Mais ne vous y trompez pas, il s’agit d’un logiciel très puissant qui doit absolument faire partie de vos préoccupations.

Lire l'article "

Comprendre comment personnaliser VIM sur MacOS

Si vous commencez déjà à maîtriser VIM, il est temps de passer aux étapes suivantes.
Dans cet article, je vais vous expliquer comment installer VIM pour MacOS de la manière que je considère la plus propre (vous pouvez vouloir l’installer différemment et c’est très bien) et comment configurer les plugins NerdTree, pour accéder à l’arborescence des répertoires ; Status Tab pour mettre quelques outils supplémentaires à l’écran (et ils rendent VIM très joli) ; et le plugin Git, pour faciliter le contrôle de version sans quitter l’application.
Bonne lecture !

Lire l'article "

Comment afficher les couleurs dans le terminal

Voulez-vous afficher des textes en couleurs, en gras, en italique, soulignés, etc.
La compréhension de quelques règles et codes rend la chose plus facile qu’il n’y paraît.
Apprenez à afficher des couleurs dans votre terminal avec la clarté de quelqu’un qui sait ce qu’il fait.

Lire l'article "
bureau-it.com