sonderzeichen in dateinamen
bjoern
- php
-2 Tom-2 Stefano Albrecht1 Tobias Kloth
-1 dasepp1 Tobias Kloth
0 Tom
Hallo Leute,
ich möchte über ein file-input die Mölichkeit zum Dateiupload bieten. Die Bilddateien dürfen aber keine Sonderzeichen enthalten, da sie sonst nicht dagestellt werden können.
Frage: Wie kann ich den in $_FILES['bild']['name'] enthaltenen Bildnamen von Umlauten & für Dateinamen kritische Zeichen befreien??
Gruß
Björn
Hello,
ich möchte über ein file-input die Mölichkeit zum Dateiupload bieten. Die Bilddateien dürfen aber keine Sonderzeichen enthalten, da sie sonst nicht dagestellt werden können.
Frage: Wie kann ich den in $_FILES['bild']['name'] enthaltenen Bildnamen von Umlauten & für Dateinamen kritische Zeichen befreien??
Du könntest rawurlencode() anwenden, dann funktionieren die Sonderzeichen zumindest auf Unixmaschinen einwandfrei.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Leute,
Guten Abend :~)
Frage: Wie kann ich den in $_FILES['bild']['name'] enthaltenen Bildnamen von Umlauten & für Dateinamen kritische Zeichen befreien??
Manuell mit str_replace(); in einer Schleife.
Gruß
Björn
Einen arbeitsreichen Tag noch
Stefano Albrecht
Hallo bjoern,
ich möchte über ein file-input die Mölichkeit zum Dateiupload bieten. Die Bilddateien dürfen aber keine Sonderzeichen enthalten, da sie sonst nicht dagestellt werden können.
Frage: Wie kann ich den in $_FILES['bild']['name'] enthaltenen Bildnamen von Umlauten & für Dateinamen kritische Zeichen befreien??
ersetz doch einfach gnadenlos alles was nicht in a-z0-9_.- enthalten ist durch einen _ o.ä.:
$dateiname = preg_replace('~^[^a-z0-9_.-]$~','_',$_FILES['bild']['name']);
Grüße aus Nürnberg
Tobias
Ich habe das geliche Problem auch mal gehabt, und diese Funktion dazu erstellt:
function file_name($replacement) {
$replacement = stripslashes($replacement);
$replacement = str_replace('^','',$replacement);
$replacement = str_replace('|', '', $replacement);
$replacement = str_replace('ß','ss',$replacement);
$replacement = str_replace('!','_',$replacement);
$replacement = str_replace('á','a',$replacement);
$replacement = str_replace('à','a',$replacement);
$replacement = str_replace('À','A',$replacement);
$replacement = str_replace('Á','A',$replacement);
$replacement = str_replace('â','a',$replacement);
$replacement = str_replace('Â','A',$replacement);
$replacement = str_replace('Ä','Ae',$replacement);
$replacement = str_replace('ä','ae',$replacement);
$replacement = str_replace('Æ','Ae',$replacement);
$replacement = str_replace('æ','ae',$replacement);
$replacement = str_replace('å','a',$replacement);
$replacement = str_replace('Å','A',$replacement);
$replacement = str_replace('Ã','A',$replacement);
$replacement = str_replace('Œ','Ce',$replacement);
$replacement = str_replace('œ','ce',$replacement);
$replacement = str_replace('Ç','C',$replacement);
$replacement = str_replace('ç','c',$replacement);
$replacement = str_replace('é','e',$replacement);
$replacement = str_replace('è','e',$replacement);
$replacement = str_replace('É','E',$replacement);
$replacement = str_replace('È','E',$replacement);
$replacement = str_replace('ê','e',$replacement);
$replacement = str_replace('Ê','E',$replacement);
$replacement = str_replace('€','E',$replacement);
$replacement = str_replace('ë','e',$replacement);
$replacement = str_replace('Ë','E',$replacement);
$replacement = str_replace('í','i',$replacement);
$replacement = str_replace('ì','i',$replacement);
$replacement = str_replace('Í','I',$replacement);
$replacement = str_replace('Ì','I',$replacement);
$replacement = str_replace('î','i',$replacement);
$replacement = str_replace('ï','i',$replacement);
$replacement = str_replace('Î','I',$replacement);
$replacement = str_replace('Ï','I',$replacement);
$replacement = str_replace('Ñ','N',$replacement);
$replacement = str_replace('ñ','n',$replacement);
$replacement = str_replace('ó','o',$replacement);
$replacement = str_replace('ò','o',$replacement);
$replacement = str_replace('Ó','O',$replacement);
$replacement = str_replace('Ò','O',$replacement);
$replacement = str_replace('ô','o',$replacement);
$replacement = str_replace('Ô','O',$replacement);
$replacement = str_replace('Ö','Oe',$replacement);
$replacement = str_replace('ö','oe',$replacement);
$replacement = str_replace('ú','u',$replacement);
$replacement = str_replace('ù','u',$replacement);
$replacement = str_replace('Ú','U',$replacement);
$replacement = str_replace('Ù','U',$replacement);
$replacement = str_replace('û','u',$replacement);
$replacement = str_replace('Û','U',$replacement);
$replacement = str_replace('Ü','Ue',$replacement);
$replacement = str_replace('ü','ue',$replacement);
$replacement = str_replace('ÿ','y',$replacement);
$replacement = str_replace('?','_',$replacement);
$replacement = str_replace('&','_',$replacement);
$replacement = str_replace('=','_',$replacement);
$replacement = str_replace('*','_',$replacement);
$replacement = str_replace("'",'_',$replacement);
$replacement = str_replace('"','_',$replacement);
return $replacement;
}
Zum Speichern des Bild brauchst du dann diese Zeile:
move_uploaded_file($_FILES['bild']['tmp_name'], 'bilderordner/'.file_name($_FILES['bild']['name']));
Hallo,
function file_name($replacement) {
$replacement = stripslashes($replacement);
$replacement = str_replace('^','',$replacement);
$replacement = str_replace('|', '', $replacement);
[viele Zeilen gelöscht]
du bist sicher, dass du alle Zeichen dir rausgefiltert werden sollen, berücksichtigt hast? Was ist z.B. mit russischen oder chinesischen Zeichen?
Du weißt aber schon, dass str_replace als Parameter auch Arrays akzeptiert, ja? Man kann die zu ersetzenden Zeichen auch alle in ein Array schreiben und das dann str_replace übergeben.
Grüße aus Nürnberg
Tobias
Hello,
Du weißt aber schon, dass str_replace als Parameter auch Arrays akzeptiert, ja? Man kann die zu ersetzenden Zeichen auch alle in ein Array schreiben und das dann str_replace übergeben.
...was aber erst ab PHP 4.3.3 (oder ähnlich, bitte nachlesen) fehlerfrei funktioniert.
Außerdem werden die Codes der Zeichen ersetzt, die der Editor für die Zeichen bei der Erstellung der Datei eingesetzt hat. Wenn in Russland auf diesem Code andere Zeichen sitzen, werden die dann eben von dem Script, dass auf einen weteuropäisch eingericheten Server läuft, stattdessen ersetzt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom