Codifica/decodifica degli URL con sed

Esistono vari modi per codificare/decodificare gli url. In genere i programmatori utilizzano funzioni già pronte per questo scopo. Ma sai davvero cosa fanno queste funzioni? Per questo articolo, ho scelto sed come strumento per sostituire i codici e ti indicherò le RFC che trattano l'argomento.

Tempo di lettura stimato: 4 minuti

Introduzione

La codifica degli URL deve essere applicata ogni volta che è necessario utilizzare un carattere riservato in un URL. Ma quali sono questi caratteri riservati e chi li ha definiti?

I caratteri riservati sono descritti esplicitamente nella RFC 3986: https://datatracker.ietf.org/doc/html/rfc3986#section-2.2

Essi sono:

reserved    = gen-delims / sub-delims

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

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

In altre parole: “:” , “,” , “?” , “#” , “[” , “]” , “@”, “!” , “$” , “&” , “‘” , “(” , “)”, “*” , “+” , “,” , “;” , “=”

Per decodificare, devi sapere che vengono utilizzati i codici esadecimali della tabella ASCII. Consulta la tabella nel manuale:

man ascii

Gli URL codificati mostrano il % prima di ogni numero esadecimale nella tabella ASCII. Pertanto, per creare la codifica, basta sostituire il carattere riservato con %esadecimale! =D

Considera che la tua shell leggerà e interpreterà l’esadecimale con il codice di escape corrispondente. Per bash, useremo \x. Guarda la tabella qui sopra e fai i tuoi test. Per l’esclamazione ! il codice è 21. Dai un’occhiata:

$ echo -e "\x21"
!

Sostituzione con sed

Analizziamo una semplice funzione con sed per effettuare la decodifica:

    #!/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}In pratica, il comando sed s/%( )/\x\1/g sostituisce tutti i % con \x, a condizione che i 2 caratteri successivi rappresentino un numero esadecimale (da 00 a FF). echo Quindi viene attivata l’opzione -e di per interpretare questo esadecimale. s/\+/ /g Inoltre, il secondo comando di sed sostituisce i segni + con lo spazio =). L’opzione -E in sed serve a consentire l’uso delle moderne espressioni regolari, per evitare l’uso di molti caratteri di escape che incasinano la sintassi.

Per uno script un po’ più sofisticato, che si occupi anche della codifica, utilizziamo una serie di comandi sed in sequenza.

Vedi il codice completo, che include tutti i caratteri riservati dell’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")

Nota sulla codifica delle stringhe di query

Spesso il segno + compare negli URL per sostituire lo spazio. Questo accade quando il testo è contenuto in una stringa di query. Vedi questa sezione in RFC1866: https://datatracker.ietf.org/doc/html/rfc1866#section-8.2.1

Ma per qualsiasi altra codifica HTML, dovresti utilizzare la codifica percentuale (codifica URL).

Unicode

Ok, ora che hai capito la logica della cosa, ti starai chiedendo: e se uso i caratteri accentati?

Gli accenti non sono presenti nella tabella ASCII, ma nello standard Unicode. Questo standard può essere visualizzato come UTF-8, UTF-16 e UTF-32 (UTF= Unicode Transformation Format, per saperne di più visita https://www.unicode.org/faq/utf_bom.html). Puoi trovare maggiori informazioni su Unicode direttamente dalla fonte: https: //unicode.org/.

Se l’impostazione predefinita per l’utilizzo di un numero esadecimale è \x, l’unicode è \u. Ad esempio:

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

Per verificare di quale codice esadecimale si tratta, usa hexdump:

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

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

Per verificare il codice unicode a partire da un codice esadecimale, dovrebbe essere sufficiente quest’area del sito web Unicode che cerca le tabelle dei codici dei caratteri, ma accetta solo l’esadecimale UTF-16. Tuttavia, è possibile verificare quale codice Unicode è UTF-8 esadecimale attraverso la ricerca che il sito scarfboy effettua. Dai un’occhiata:

Unicode in macOS bash

echo -e "\u2623"Su MacOS, a causa di problemi di licenza software con bash a partire dalla versione 4.0, non possiamo generare unicode come ☣ con . brew install bashMa puoi installare l’aggiornatissima bash 5+ usando . Se non hai mai usato brew, l’installazione è molto semplice: dai un’occhiata al sito web dell’autore https://brew.sh.In quest’altro articolo, la procedura per rendere la nuova bash predefinita è molto dettagliata. Fortunatamente, gli utenti di Linux non avranno questo problema. =D

Se vuoi generare un elenco ENORME di caratteri unicode, prova questo script qui sotto. chmod +x Ricordati di salvarlo in un file e di dargli il permesso di esecuzione con . Se non compare nessun carattere, rileggi il paragrafo precedente e aggiorna la tua 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

Vedi anche

Domande?
Scrivete nei commenti. Alla prossima!

Comentários

Altri articoli

Come utilizzare bc, il calcolatore di conchiglie

bc = calcolatrice da banco.
Se non conosci ancora la calcolatrice della tua shell, è il momento di imparare a usarla, anche se il suo utilizzo è molto elementare.
L’uso più banale delle sue funzioni dovrebbe già soddisfare la maggior parte delle tue esigenze.
Ma non lasciarti ingannare: si tratta di un software davvero potente che dovrebbe essere assolutamente presente nel tuo radar.

Leggi l'articolo "

Capire come personalizzare VIM su MacOS

Se stai già iniziando a familiarizzare con VIM, è il momento di fare i passi successivi.
In questo articolo ti spiegherò come configurare VIM per MacOS in quello che considero il modo più pulito (potresti volerlo installare in modo diverso e non c’è problema) e come configurare i plugin NerdTree, per accedere all’albero delle directory; Status Tab per inserire alcuni strumenti aggiuntivi sullo schermo (che rendono VIM molto bello); e il plugin Git, per facilitare il controllo delle versioni senza lasciare l’applicazione.
Buona lettura!

Leggi l'articolo "
bureau-it.com