#1 26. Mai 2009 utf-8 decode hi, probier mich mit perl. möchte nen upload machen, das soweit funktioniert. jetzt möchte ich den dateinamen umändern, nur kommen die parameter von einer utf-8 seite. d.h. mein wert ist in utf-8 und kann daher nicht suchen ersetzen. hab jetzt echt sau viel gelesen gegooglet und komm einfach auf keinen grünen zweig. zum ablauf - ich hab ein formular (diese seite ist utf-8) zum uploaden. - ich übergebe an upload.cgi my $file = $cgi->param("file"); my $filename = &MakeFilename($file); sub MakeFilename { my $file = shift; # irgendwelche ansätze #$file =~ s/\xc3(.)/chr(ord($1) + 0x40)/eg; #$file = utf8::decode($file); $file =~ s/[äÄ]+/ae/g; $file =~ s/[öÖ]+/oe/g; $file =~ s/[üÜ]+/ue/g; $file =~ s/[ß]+/ss/g; $file =~ s/[^a-zA-Z0-9\-\._-]+//gi; $file = lc($file); return $file; } filename: Ä_Bäüö-(Ä) ßerSchnitt.jpg uploadfile: Ä_Bäüö-(Ä) ßerSchnitt.jpg rename sollte sein: ae_baeueoe-aesserschnitt.jpg kann mir jemand weiterhelfen. // edit keine ahnung was ich gemacht hab. hab paar zeilen gelöscht und dann gings auf einmal. für die nachwelt (upload.pl): PHP: #!"C:\xampp\perl\bin\perl.exe" use strict ; use CGI ; my $cgi = new CGI ; my $file = $cgi -> param ( "file" ); my $path = $cgi -> param ( "osupload" ); $file = & MakeFilename ( $file ); my $fname = $path . $file ; open DAT , '>' . $fname or die 'Error processing file: ' ,$!; binmode $file ; binmode DAT ; my $data ; while( read $file , $data , 1024 ) { print DAT $data ; } close DAT ; print $cgi -> header (- type => 'text/html' ); print << "HTML" ; < html > < head > < title > Fileupload </ title > </ head > < body bgcolor = "#FFFFFF" > < h1 >Die Datei $file wurde erfolgreich hochgeladen .</ h1 > < p > Die Datei $file wurde erfolgreich auf dem Server gespeichert . </ p > </ body > </ html > HTML sub MakeFilename { my $file = shift ; $file =~ s /\ xc3 (.)/ chr ( ord ($ 1 ) + 0x40 )/ eg ; $file =~ s /[ äÄ ]+/ ae / g ; $file =~ s /[ öÖ ]+/ oe / g ; $file =~ s /[ üÜ ]+/ ue / g ; $file =~ s / ß / ss / g ; $file =~ s /[^ a - zA - Z0 - 9 \-\. _ -]+ //gi; $file = lc ( $file ); return $file ; }