Newsgroup: it.comp.lang.perl
Titolo: convertire caratteri speciali (form, cgi)

quando con un browser (netscape) mando un FORM (method=PUT)
<INPUT TYPE="TEXT" NAME="PAROLE" SIZE="60" MAXLENGTH="80" >
se nella stringa sono presenti caratteri speciali come le lettere
accentate, ma anche +, /, %, & ecc. questi vengono trasformati
(non sto dicendo nulla di nuovo, vero?)
domanda, in perl esiste una funzione di conversione già bella e fatta
non perché sia difficile farla, ma soprattutto perché dovrei scoprire
tutti i caratteri speciali e poi evitare di sbagliarmi.
in alternativa, qualcuno ha o sa dove c#è una tabellina del genere?
grazie
antonio
PS: ringrazio tutti quelli che mi hanno aiutato a capire i richiami di
libreria e di fare un po d'insiemistica.

in alternativa, qualcuno ha o sa dove c#è una tabellina del genere?
Ci sara' sicuramente qualcosa di gia' fatto, io uso normalmente queste
tre funzioncine che mi sono scritto e tornano in un array associativo
i valori passati con metodo POST e GET:
#--------------------------------------------------------------------------
#                  FORM_POST
# Legge i dati passati da una FORM con il metodo POST.
# Torna un array associativo con nomi di chiave case sensitive
# NON effettua il trim di spazi intorno ai valori, che tornano ASCII.
sub FORM_POST { my($buffer);
  read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
  return FORM_UNWEB($buffer) }
#--------------------------------------------------------------------------
#                  FORM_GET
# Legge i dati passati da una FORM con il metodo GET.
# Torna un array associativo con nomi di chiave case sensitive
# NON effettua il trim di spazi intorno ai valori, che tornano ASCII.
sub FORM_GET { return FORM_UNWEB(join('+',@ARGV)) }
#--------------------------------------------------------------------------
#                  FORM_UNWEB
# Si assume che sia passata una stringa dati di GET o POST.
# Imposta l'array associativo $FORM con nomi di chiave case sensitive
# NON effettua il trim di spazi intorno ai valori, che tornano ASCII.
sub FORM_UNWEB { my $pair = shift(@_);
  my (@pairs,$nome,$valore,%FORM);
  @pairs = split(/&/,$pair);
  if ($#pairs ne -1) {
    foreach $pair (@pairs) { ($nome,$valore) = split(/=/,$pair);
      $valore =~ s/%([a-zA-Z0-9][a-zA-Z0-9])/pack("C",hex($1))/eg;
      $valore =~ s/[\+\t\r\n]/ /g; $FORM{$nome} = $valore; } }
  return %FORM }
------
bale...@dada.it
 
http://zap.to/balestra
  ICQ#:14303012
" Ora mai che i baci tuoi piu' non mi sazian
  cerchero' un'altra donna dentro ai sogni di Tarzan... "

 tutti i caratteri speciali e poi evitare di sbagliarmi.
Se usi CGI.pm, trovi una bellissima funzione 'escape' ed una 'unescape' per
questo tipo di operazioni:
#!/usr/bin/perl
use CGI;
$string_url_encoded = CGI::escape($string_to_url_encode);
$string_to_url_encode = CGI::escape($string_url_encoded);
semmai un bel 'perldoc CGI' aiuta sempre ... :-)
    Hope this helps
    Best Regards,
        Kazuma
--
Alex Garbagnati, 
agarb...@removethis.decisive.com
Sr. Lead Engineer, Product Development
Decisive Technology Corporation
Mountain View, CA  94043


OPPSSS..... nella seconda riga il comando e' CGI::unescape
#!/usr/bin/perl
use CGI;
$string_url_encoded = CGI::escape($string_to_url_encode);
$string_to_url_encode = CGI::unescape($string_url_encoded);
    Best regards,
        Alex
