Uploadskript Umlaute ersetzen

Moin,

ich würde da ein Charset-Problem vermuten. In welchem Charset ist dein Skript gespeichert?

Falls in UTF-8: probiere mal, vor dem str_replace() den Inhalt von $_FILES['bild']['name'] mit utf8_encode() zu codieren.
 
PHP:
$ziel = "../uploadedPics/"; 
$zielUndDatei = $ziel.$_FILES['bild']['name']; 

$max_size =  5242880; // Entspricht 5 Megabyte 
$search = array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü');  
$replace = array('ae', 'oe', 'ue', 'ss', 'Ae', 'OE', 'UE'); 



if($_FILES["bild"]['size']<  $max_size) 
    { 
    $j = 1; 
    $pruefe = $ziel.$_FILES['bild']['name']; 
                            if(file_exists($pruefe)) 
                                { 
                                  do 
                                    { 
                                    $_FILES['bild']['name']= utf8_encode($_FILES['bild']['name']);// <--------------------------------------------
                                    $filepath = str_replace($search, $replace,$ziel."copy".$j."_of_".$_FILES['bild']['name']); 
                                    $filename = str_replace($search, $replace,"copy".$j."_of_".$_FILES['bild']['name']); 
                                    $status = file_exists($filepath); 
                                    $j++; 
                                    } 
                                  while($status); 
                                }  
                            else 
                                    { 
                                   $_FILES['bild']['name']= utf8_encode($_FILES['bild']['name']); // <--------------------------------------------
                                    $filepath = str_replace($search, $replace, $ziel.$_FILES['bild']['name']); 
                                    $filename = str_replace($search, $replace, $_FILES['bild']['name']); 
                                    } 
                         
                        move_uploaded_file($_FILES["bild"]['tmp_name'], $filepath); 

    }


Jetzt macht er immerhin aus Äpfel --> Aepfel. Allerdings funktioniert jetzt die Abfrage nicht mehr ob es dieses Bild schon gibt. D.h. er überschreibt das jetzt wahrlos. Er rutscht also nicht mehr in die do while Schleife rein, sondern haut die Datei ohne sie umzubennen in den Zielordner. Blöd, schaffs nämlich nicht ihm das auszutreiben....
 
Noch ein Hinweis am Rande:
Du ersetzt zwar jetzt ein paar Sonderzeichen, aber es gibt noch ein paar tausend, die erhalten bleiben. Also würde ich nach dem Ersetzen der Umlaute noch eine Ersetzung drüber laufen lassen, welche alles entfernt, was da jetzt nicht mehr hin gehört (é, è, í, ì, ó, ò, uvm.).

PHP:
$some_text = preg_replace('/[^a-zA-Z0-9_-]/', '', $some_text);
//löscht alles was nicht alphanumerisch oder Minus oder Unterstrich ist. Eventuell anstatt zu Löschen auch durch Unterstrich oder so ersetzen.
 
CPolys Vorschlag klingt eigentlich sehr gut. Allerdings entfernt er mir dann auch de . vor der Dateianednung aus Äpfel.jpg wird dann pfeljpg. Mit regulären Ausdrücken steh ich bissl auf Kriegsfuss, kann man diesen hier noch soweit erweitern, dass der Punkt ebenfalls erlaubt ist?
 
Den Punkt hab ich ganz vergessen ;).
Und die Umlaute die du behalten willst, muss du eben vorher ersetzen, so wie du es vor hattest. Meine Ersetzung soll dazu dienen, am Ende alles "aufzuräumen".

Mit Punkt:
PHP:
$some_text = preg_replace('/[^a-zA-Z0-9._-]/', '', $some_text);

Ich kann aber wirklich jedem empfehlen, sich mit regulären Ausdrücken zu beschäftigen. Am Anfang kam mir das auch alles spanisch vor, aber wenn man sich etwas damit außeinander setzt, fragt man sich, wie man vorher ohne reguläre Ausdrücke aus kam.
 

Neue Beiträge

Zurück