PHP, Unicode & preg_match
-
Moin,
ich verzweifle hier gerade an einer simplen Aufgabe und weiß nicht mehr so recht weiter:
preg_match('/[a-zäöü]+/ims',$text,$match);
Ich will einfach nur Wörter mit Umlauten matchen können. Dürfte ja theoretisch nicht so schwer sein
Text ist in dem Fall ein aus ner Datenbank stammender Text, der in UTF-8 kodiert ist. Und ja, auch die Verbindung zum Datenbank-Server läuft UTF-8-kodiert.Ich habe auch schon den /u switch für preg_match ausprobiert als auch ä,ö,ü durch die entsprechenden hex. Codes ersetzt(\xC3 usw.). Und auch mit [[:word:]] klappt es nicht.
Gibt es noch irgendwas, was ich beachten müsste und warum ist Unicode so ein verdammter Krampf (in PHP)?
Meine PHP-Version ist mit 5.2.8 relativ aktuell.
-
Was passiert wenn du statt preg_ einfach die Suche in dem SQL Query machst?
Prinzipiell ist es so naemlich korrekt (mit /u) was du machst. Der Fehler liegt also irgendwo, ergo sind mehr infos noetig.
uU ist PHP nicht mit UTF8 Support kompiliert? Wenn ja, dann probiert mal (*UTF8) an den Anfang des Pattern zu setzen.
Also:
preg_match('/(*UTF8)[a-zäöü]+/uims',match);Ansonsten: mehr infos pls
-
Was passiert wenn du statt preg_ einfach die Suche in dem SQL Query machst?
Wenn ich per SQL-Query suche erhalte ich auch entsprechende Zeilen.
preg_match('/(*UTF8)[a-zäöü]+/uims',$text,$match);
Liefert bei mir:
Warning: preg_match() [function.preg-match]: Compilation failed: (*VERB) not recognized
Ich gehe also mal davon aus, dass hier der UTF-8-Support fehlt... Das PHP-Modul stammt übrigens aus der LAMPP-1.7er Distribution. Kompilieren brauchte ich da nichts mehr, war ja alles schon fertig.
Kann man den UTF-8 Support jetzt im Nachhinein noch einschalten?
-
Sieht so aus als waere die pcre ohne UTF8 Support kompiliert worden. Da hilft nichts mehr - nur neu kompilieren/installieren.