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.


  • Mod

    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',text,text,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?


  • Mod

    Sieht so aus als waere die pcre ohne UTF8 Support kompiliert worden. Da hilft nichts mehr - nur neu kompilieren/installieren.


Anmelden zum Antworten