Hello,
ich habe mich mal daran gemacht, eine "Kastrationsfunktion" in PHP zu erstellen.
Leider habe ich mit Multibyte und Singlebyte nun total verhaspelt.
Was wird zum Vergleich wann wo wie gespeichert und verglichen?
Es gibt kein "mb_str_replace()", Aber ich kann auch keine Zeichen dediziert in einer Codierung vorgeben. Die fehlenden Funktionen hatten wir in einem anderen Thread. Dazu fehlen mir einfach die Informatonen über die Codepoints und passende Funktionen dazu, um daraus eine Bytefolge zu machen. Und dann sind wir schon bald wieder soweit unten , ob da Big-Endian oder Little-Endian gespeichert wird usw.
Bisher hatte ich diesen Fahrplan
* Umlaute entfernen bzw. ersetzen
* kein führender Punkt
* keine Pfade zulassen ('' und '/' entfernen bzw. austauschen)
* alle nicht in einer Positivliste enthaltenen Zeichen ersetzen.
* Dateiendungen (*.ext) kontrollieren und ggf. ersetzen oder ablehnen
Es müssen aber die Codierungen für die Namensübertragung, die Scripte, die Progammerstellung etc. beachtet werden. Hier passiert mir noch zuviel automatsich an Stellen, die ich noch nicht auf dem Schirm habe.
function castrate_name($name)
{
static $file_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-+_ ~!#$%&(),@[]{}';
$_search1 = array(' ', 'ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü', '/', '\\');
$_replace1 = array('_', 'ae', 'oe', 'ue', 'ss', 'Ae', 'Oe', 'Ue', '-', '-');
$_search2 = array('<', '>', '?', '"', ':', '|', '*');
$replace2 = '#';
$name = str_replace($_search1, $_replace1, $name);
$name = str_replace($_search2, $replace2, $name);
$len = mb_strlen ($name);
### Verwirrung
return $newname;
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg