[Perl] utf8_encode problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Perl] utf8_encode problem

    hallo zusammen

    habe folgendes problem:

    ich habe ein CGI/Perl-script welches ich für ein gästebuch für flashmx benutze. das script war eine vorlage und ich musste nur die pfad angaben ändern. nun, das script funktioniert einwandfrei in verbindung mit flash5. jetz möchte ich aber das script in verbindung mit flashmx benutzen. bei flashmx muss aber der text der mit dem script ausgetauscht wird in utf8-format sein.

    nach einigen nachforschungen kann man das mit utf8_encode bewerkstelligen.

    es geht um folgendes script, wobei eigentlich nur "read book" interessant sein sollte:

    PHP-Code:
    #!/usr/bin/perl


    #### Set the Variables ##############################

    $basedir="/home/blabla/public_html/cgi-bin/lucie_guestbook/";
    $listfile="gbuch.txt";
    $mailprog '/usr/bin/sendmail';
    $list_mail "root\@blabla.ch";

    ###################################################


    if (!$ARGV[0]) {
        if(
    $ENV{'REQUEST_METHOD'eq 'GET')
        { 
    $ARGV[0] = $ENV{'QUERY_STRING'};
           }
        else 
        { 
    read(STDIN$ARGV[0], $ENV{'CONTENT_LENGTH'});
        }
    }
    if (
    $ARGV[0]) {
        %
    FORM;
        &
    get_arg;
            
        if (
    $FORM{'todo'eq 'read' ) {
            &
    read_book;
        }

        if (
    $FORM{'todo'eq 'sign' ) {
            &
    sign_book;
        }
    }
    else {
        print 
    "no parameters!\n";
    }    

    #### Initialize Arguments ##################################

    sub get_arg {
     @
    pairs split(/&/, $ARGV[0]);
     foreach 
    $pair (@pairs) {
          (
    $name$value) = split(/=/, $pair);
           
    $value =~ tr/+/ /;
           
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C"hex($1))/eg;
           
    $value =~ s/<!--(.|\n)*-->//g;      
           
    $FORM{$name} = $value;
      } 
    #foreach
    #end get_arg


    #### Read Book ##################################

    #### Read Book ##################################

    sub read_book {
    open (LISTE,"<$basedir/$listfile") || die $!;
    @
    liste = <LISTE>;
    close (LISTE);
    $ccount=0;
    print 
    "Content-type: text/html\n\n";
        foreach 
    $zeile (@liste){
            
    #print "coeof=true&";
            
    print $zeile;
            print  
    "&";
            
    $ccount++;
        } 
    #foreach
    print "&count=$ccount&eof=true";


    #### Sign Book ##################################

    sub sign_book {
    $ccount=1;
        &
    datum;
        
    open (LISTE,"<$basedir/$listfile") || die $!;
        @
    liste = <LISTE>;
        
    close (LISTE);
        foreach 
    $zeile (@liste){ $ccount++; }

        
    open (BOOK,">>$basedir/$listfile") || die $!;
        print 
    BOOK "aname$ccount=$FORM{'name'}&acomment$ccount=$FORM{'comment'}&aurl$ccount=$FORM{'url'}&adate$ccount=$long_date&aemail$ccount=$FORM{'email'}&ax$ccount=$FORM{'txtx'}&ay$ccount=$FORM{'txty'}&aIP$ccount=$ENV{'REMOTE_ADDR'}&at$ccount=$FORM{'t'}\n";
        
    close (BOOK);

        print 
    "Content-type: text/html\n\n";
        print 
    "eof=true";
        
        
    open (MAIL"|$mailprog -t")
                    || print 
    "Can't start mail program";
                print 
    MAIL "To: $list_mail\n";
                  print 
    MAIL  "From: $list_mail\n";
                print 
    MAIL  "Subject: Eintrag ins FW-Buch!\n\n";
                    

        print 
    MAIL "Hier die Informationen - Besucher $ccount:\n\n";
        print 
    MAIL "Name: $FORM{'name'}\n";
        print 
    MAIL "URL: $FORM{'url'}\n";
        print 
    MAIL "E-mail: $FORM{'email'}\n";
        print 
    MAIL "Datum: $long_date\n";
        print 
    MAIL "Address: $ENV{'REMOTE_ADDR'}\n";
        print 
    MAIL "Kommentar: $FORM{'comment'}\n";
        print 
    MAIL "\n";
        print 
    MAIL "Service des,\n";
        print 
    MAIL "Cybercollege-Team\n\n";
                      
                    
    close (MAIL);
                    
    exit;    
        
    #end sign_book



    #### Get Date and Time ##################################
    #### Jahr 2000 Sicher  ##################################

    sub datum {
        @
    days   = ('Sunday','Monday','Tuesday','Wednesday',
               
    'Thursday','Friday','Saturday');
        @
    months = ('Januar','Februar','M&auml;rz','April','Mai','Juni','Juli',
             
    'August','September','Oktober','November','Dezember');

        
        (
    $sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
        
    $time sprintf("%02d.%02d",$hour,$min);
        if (
    $mday 10) { $mday "0$mday"; }
        
    # $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
        
    $year += 1900;                                              
        
    $long_date "$mday\. $months[$mon] $year ($time Uhr)";             
        
    # $long_date = "$days[$wday], $months[$mon] $mday, $year at $time";   
    }

    exit; 
    eben wie oben gesagt, es geht mE. eigentlich nur um diesen scriptteil:
    PHP-Code:
    #### Read Book ##################################

    sub read_book {
    open (LISTE,"<$basedir/$listfile") || die $!;
    @
    liste = <LISTE>;
    close (LISTE);
    $ccount=0;
    print 
    "Content-type: text/html\n\n";
        foreach 
    $zeile (@liste){
            
    #print "coeof=true&";
            
    print $zeile;
            print  
    "&";
            
    $ccount++;
        } 
    #foreach
    print "&count=$ccount&eof=true";

    wenn ich nun die zeile
    "print $zeile;"
    in
    "print utf8_encode ($zeile);"
    ändere, funktioniert das ganze script nicht mehr. dh., dass der aufruf "buch.cgi?todo=read" kein text mehr zurück gibt.

    weiss jemand wieso das so ist? ist es ein formatierungsfehler? oder was serverseitiges?

    schon mal besten dank für eure antworten.

  • #2
    Also ich bin jetzt zwar nicht der Perl Held, aber kommt denn gar keine Fehlermeldung? Ausserdem, warum ist der Content Type text/html sollte das nicht text/plain sein? Ausserdem kannst Du mit einen HTML Header (musste mal gucken welcher) das Encoding für den Browser festlegen, damit er das anzeigt.

    Kommentar

    Lädt...
    X