AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PHP zeichenketten filter mit preg_replace
Thema durchsuchen
Ansicht
Themen-Optionen

PHP zeichenketten filter mit preg_replace

Ein Thema von Luckie · begonnen am 18. Sep 2008 · letzter Beitrag vom 19. Sep 2008
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

PHP zeichenketten filter mit preg_replace

  Alt 18. Sep 2008, 23:37
Ich habe in meinem php-Mailscript festgestellt, dass bei den Namen auch die Umlaute verloren gehen. Ich denke, das wird hier an dieser Stelle passieren:
Code:
$name = preg_replace('#[^a-zA-Z0-9 ]#i', '', $_POST['yourname'])
Was müsste cih dort ändern, damit die Umlaute und Satzzeichen erhalten bleiben? Ich kenne mich mir Regulärenausdrücken leider nicht aus.
Michael
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: PHP zeichenketten filter mit preg_replace

  Alt 19. Sep 2008, 00:05
Wenn du Umlaute und _alle_ Satzzeichen erhalten willst, geht das ganz schnell in die Unicode-Zeichenklassen. Beispiel: [^\w\p{P}] sollte deinen Ansprüchen genügen, wenn die Engine die \p{}-Syntax unterstützt - ansonsten musst du an Stelle des \p{P} alle Satzzeichen auflisten.


http://www.regular-expressions.info/
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

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

Re: PHP zeichenketten filter mit preg_replace

  Alt 19. Sep 2008, 09: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz