Zitat von
Luckie:
Code:
$name = preg_replace('#[^a-zA-Z0-9 ]#i', '', $_POST['yourname'])
Der Hinweis mit dem
Unicode ist richtig, aber vielleicht langt Dir ja eine kleinere Lösung. Oben definierst Du in den eckigen Klammern eine Zeichenmenge: Kleinbuchstaben, Großbuchstaben, Ziffern und dann das Leerzeichen. Mit dem Hütchen (^)davor negierst Du die Menge, so dass Folgendes daraus wird:
"Alles, was
nicht Kleinbuchstabe a-z, Großbuchstabe A-Z, eine Ziffer 0-9 oder ein Leerzeichen wird, fliegt raus"
Die Minimalversion einer Erweiterung sähe jetzt so aus, dass Du diese Zeichenmenge um die Umlaute und ggf. das scharfe S erweiterst:
Code:
$name = preg_replace('#[^a-zA-Z0-9[b][u]äöüÄÖÜß[/u][/b] ]#i', '', $_POST['yourname'])
Es gibt noch das Universal-Zeichen \w, das stellvertretend für alle sog. "word-character" steht, also "alle" Buchstaben. Dann muss man allerdings darauf achten, PHP die korrekte Ländereinstellung zu verpassen:
A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.
Der Ausdruck wäre dann mutmaßlich (ungetestet) wie folgt (oder ähnlich, da ungetestet):
Code:
$name = preg_replace('#[^\w ]#i', '', $_POST['yourname'])
Daniel R. Wolf
mit Grüßen aus Hamburg