On Fri, 5 Apr 2002, MuTECH wrote:

> function CodeUrlPar($p){
>    $r='';
>    for ($i=0;$i<strlen($p);$i++){
>      $c=substr($p,$i,1);
>      if (($c>='a' && $c<='z') || ($c>='A' && $c<='Z') || ($c>='0' && $c<='9')){
>        $r.=$c;
>      }else{
>        $r.='%'.sprintf('%02X',ord($c));
>      }
>    }
>    return $r;
> }

L'une des raisons pour lesquelles je préfère perl est que l'on peut
essayer directement en ligne de commande (shell) des trucs comme:
---- Copies tout depuis le premier espace ci dessous
felix@medium:~$ perl -w -e '
sub urlenc {
    $_=shift;
    s/%/%25/g;
    while (/([\173-\377\000-\044\046-\057\072-\100])/) {
        my $o=sprintf "%%%02X", ord($1);
        my $i="\\$1";
        s/$i/$o/g;
    }
    return $_;
}
sub urldec {
    $_=shift;
    while (/%([0-9A-Fa-f][0-9A-Fa-f])/) {
        my $o=pack("H2",$1);
        my $i="%$1";
        s/$i/$o/g;
    }             
    return $_;
}             
print urlenc("Je m'\''appelle Félix!\nEt je suis 99.5% content...\n àéïôù et A-Z".
              " a-z 0-9 #<a href=\"Ragnagna\">")."\n";
print urldec("Je%20m%27appelle%20F%E9lix%21%0AEt%20je%20suis%2099%2E5%25%20".
             "content%2E%2E%2E%0A%20%E0%E9%EF%F4%F9%20et%20A%2DZ%20a%2Dz".
             "%200%2D9%20%23%3Ca%20href%3D%22Ragnagna%22%3E")."\n";
'
---- ... Et colles dans un terminal shell:)

... L'aller et le retour...

De plus, ce genre de routine est bcp plus rapide que la tienne:
La boucle et le test ne sont effectués qu'une fois par type de caractère à
modifier et pas du tout s'il n'y à rien à modifier: Si ta chaine comporte
cinq ``e accent aigu'' et huit ``a accent grave'' la boucle ne sera
effectuée que deux fois!

--
 Félix Hauri  -  <[EMAIL PROTECTED]>  -  http://www.f-hauri.ch

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.

Répondre à