As tu essayé la méthode "bourrin" ?
Encodage :
$chaine =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
Decodage :
$chaine =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
En gros, si c'est pas une lettre ou un chiffre, on remplace par %XX où XX est le code ASCII du caractère, complèté à gauche par un zero, au besoin.
C'est probablement un peu excessif ... on doit pouvoir ajouter "-", "/" et "." dans l'intervalle non traduit, et peut être d'autres trucs, mais je ne suis pas assez affuté en Web pour savoir lesquels.
Bon courage.
Sous la forme d'un uniligne, ça peut donner :
echo "Texte à encoder" | perl -ane 'chomp;s/([^0-9A-Za-z.\/-])/sprintf("%%%02X",ord($1))/seg;print'
Partager