Sven Rautenberg: $_REQUEST überprüfen lassen...

Beitrag lesen

Moin!

Wenn das dann abgeschickt wird, soll der dann nach den Sonderzeichen suchen, meine Idee (Fund):

$Projekt = str_replace (
array('ä','ö','ü','Ä','Ö','Ü','?','/','&'),
array('ae','oe','ue','Ae','Oe','Ue',' ',' ','und'), $_REQUEST['Projekt']);

Das Problem ist, dass die Ordner erstellt werden ohne den Eintrag zu überprüfen, d.h. die Ordner werden mit ä ö ü.... erstellt.

Du hast, ohne es zu bemerken, ein Zeichencodierungsproblem.

$Projekts = ÄÖÄÖÄ;
$Projekt = str_replace (
array('ä','ö','ü','Ä','Ö','Ü','?','/','&'),
array('ae','oe','ue','Ae','Oe','Ue',' ',' ','und'), $Projekts);

und der Ordner heisst dann "... AeOeAeOeAe".

Der Unterschied zwischen diesen beiden Varianten: Methode 2 nutzt, da du die Strings mit demselben Editor in der gleichen Datei speicherst, für die Umlaute (sowie auch alle anderen Zeichen des Programmtextes) die gleiche Codierung.

Wenn hingegen die Eingabe vom $_REQUEST (schöner, weil eindeutiger, wäre die Verwendung von $_POST) kommt, dann ist die Codierung abhängig vom Browser. Wenn dessen Codierung eines "Ä" anders aussieht, als die Codierung deines "Ä" im str_replace, dann findet die Funktion keines deiner "Ä" und ersetzt auch nichts.

Du mußt also erstmal Klarheit und Einigkeit schaffen über die verwendete Codierung.

Zweitens, und das ist noch viel wichtiger: Für Datei- oder Ordnernamen verfolgst du eigentlich den falschen Ansatz. Du bist optimistisch: "Der User wird wohl nur Umlaute reinschreiben, und die ersetze ich einfach." Diese Taktik versagt, wenn der User auf die Idee kommt, mal richtig böse Zeichen zu benutzen. Was hältst du z.B. von "*", oder auch von chinesischen Zeichen etc...?

Die richtige Taktik ist Pessimismus. Du definierst eine Menge von erlaubten Zeichen, also beispielsweise große und kleine Buchstaben und Zahlen, Bindestrich und Unterstrich. Alle Zeichen, die dem nicht entsprechen, werden in eine ungefährliche Variante umgewandelt: Entweder werden sie zu einem Unterstrich, einem Bindestrich, oder ganz entfernt. Vorher könnte man, wie du es schon vorhast, für ausgewählte Zeichen eine zur Zeichenvorschrift kompatible Ersatzdarstellung für z.B. Umlaute einfließen lassen. Damit wäre dann sichergestellt, dass am Ende auf jeden Fall ein nach deinen Vorgaben gültiger Verzeichnisname rauskommt, auch wenn die Codierung falsch ist.

- Sven Rautenberg

--
"Love your nation - respect the others."