preg_match() Absätze
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
buchstabe
code
dank
entfernen
fehler
fehlermeldung
feld
funktion
http
kurzbeschreibung
sonderzeichen
sprache
string
text
umlaut
umwandeln
url
zahl
zeichen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo
... zu Umlaute (ä ö ü) und preg_match() etc. mit utf-8 string
man muss die Umlaute zuerst auch zu utf-8 umwandeln
und mann muss im Regex-Patern den Modifier /u setzen (UTF-8)
## $string = utf8_encode($string); if (!mb_detect_encoding($string, 'UTF-8', true)) { $string = utf8_encode($string); } $umlaute = 'äöüßÄÖÜ'; $umlaute = utf8_encode($umlaute); $pattern = '~^[^\sa-zA-Z' . $umlaute . '0-9!?^/()+\-*:.,]+$~/us' ## $pattern = '~^[^\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+$~' $run1 = preg_match($pattern, $string, $matches);
wenn man Umlaute in einem UTF-8 String finden will,
dann muss man auch beim "Suchen" die Umlaute als UTF-8 haben,
entweder mit utf8_encode() oder schon bei Eingabe als UTF-8 speichern
egal .... das Prinzip sollte klar sein ..
... Pattern und String sollten gleichen Charset / Kodierung haben
Beitrag zuletzt geändert: 26.6.2014 12:13:51 von netwin -
der String wurde in utf8 konvertiert. Buchstaben , und somit auch Umlaute, sind erlaubt sowie einige Zeichen. Dies ist aber nicht mein eigentliches Problem. Wie du am Themar erkennen kannst sind es die Absätze die Schwierigkeiten machen.
Gruß -
Das mit dem Absätzen geht via \s
-
mit \s war es leider nicht alleine getan. ich habe jetzt auch mahl \n\r\t\f hinzugefügt. jetzt funktioniert es
Danke für eure Mitarbeit
Gruß -
Hallo
vielleicht hilft Dir diese Funktion weiter ...
wenn man das "Verbotene Steuer- und Sonderzeichen" weglässt
... ist hier mit ## aus-Kommentiert ...
(oder eben einzeln "\r" und "\n" und "\s" aus den Steuer-Zeichen enternen)
dann sollte damit Dein String aus Textarea auch Umbrüche / Absätze enthalten,
// --------------------------------------------------------------- function strg_filter_text($string) { // ----- Text zu UTF-8 umwandeln ----- if (mb_detect_encoding($string, 'UTF-8', true) === FALSE) { $string = utf8_encode($string); } // ----- Verbotene Steuer- und Sonderzeichen (array) ----- ## $sonderz = array( '\\', "'", '"', "\0", "\r", "\n", "\t", "\s", "^" ); ## $string = str_replace($sonderz, ' ', $string); ## $string = preg_replace("/[[:cntrl:]]/is", ' ', $string); // ----- Alle Backslashes entfernen ----- while(strchr($string,'\\')) { $string = stripslashes($string); } // ----- Nur erlaubte Zeichen in Text lassen ----- $umlaute = 'äöüÄÖÜß'; $umlaute = utf8_encode('äöüÄÖÜß'); $pattern = '/[^a-zA-Z'.$umlaute.'0-9 ,:;_&\-\.\/\+']/su'; $string = preg_replace($pattern, ' ', $string); // ----- Doppelte Leerzeichen entfernen ----- $string = preg_replace('/ {2,}/', ' ', $string); // ----- Satzzeichen Anfang/Ende entfernen ----- $string = trim($string,'.,;:-+_/'); $string = trim($string); // ----- Ausgabe der Funktion ----- return $string; } // ---------------------------------------------------------------
... die Funktion mach nicht preg_match() sondern preg_replace()
d.h bei Aufruf der Funktion ekommst Du den "sauberen" Text zurück
$new_text = strg_filter_text($eingabe_text);
Bei Bedarf kann man sich durch weitere Argumente auch einzelne Zeichen als Erlaubt und/oder Verboten im Funktions-Aufruf dazu bauen, dann kann man einfacher mit verschiedenen Zeichen experimentieren.
-
Danke aber habe jetzt alles was ich brauche
-
\s steht für \r\n\t\f
Logischerweise musst du \s+ verwenden. Dies steht für "kein oder unendlich viele Zeilenumbrüche". Ohne das + steht \s für "Ein Umbruch".
Beitrag zuletzt geändert: 1.7.2014 5:11:03 von fabo -
ahhh, da ist also der Fehler. Wieder was dazugelernt
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage