Einzelnen Beitrag anzeigen

Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: PHP zeichenketten filter mit preg_replace

  Alt 19. Sep 2008, 08:03
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
  Mit Zitat antworten Zitat