preg_replace und utf8 Umlaut Problemlösung
Beitrag geschrieben von King of Darkness am 2007-09-18
Kurzbeschreibung:
Ich selbst habe ab und an mit UTF-8 und preg_replace oder auch str_replace probleme gehabt. Hier möchte ich meine Lösung für das Problem vorstellen.
Ich selbst habe ab und an mit UTF-8 und preg_replace oder auch str_replace probleme gehabt. Hier möchte ich meine Lösung für das Problem vorstellen.
Das Problem war das ich irgendwas ersetzen wollte und aber die Umlaute erhalten bleiben sollten.
Das Funktioniert solange wunderbar wie man die Finger von UTF-8 lässt.
Bei mir kommen die Daten aus eine MySQL-Datenbank die UTF-8 Codiert ihre Daten speichert.
Ersetzen wollte ich damit
Da hatte aber wohl PHP was dagegen und hat einfach die Umlaute auch mit rausgeschmissen.
Die Funktion preg_replace(); kann nämlich nicht mit Umlauten die UTF8-Codiert sind umgehen. Zum glück gibts da die Funktion utf8_decode(); mit ihr kann man einen String der UTF-8-Codiert ist in ein für preg_replace(); verständliches Format umwandeln
Nach dem Ersetzen muss der String nur wieder nach UTF-8 Codiert werden und man kann wie gewohnt weiter machen.
Hier ein Stück Code:
Das geht natürlich auch verschachtelt:
Das Funktioniert solange wunderbar wie man die Finger von UTF-8 lässt.
Bei mir kommen die Daten aus eine MySQL-Datenbank die UTF-8 Codiert ihre Daten speichert.
Ersetzen wollte ich damit
Code:
preg_replace("/[^A-Za-z0-9äÄüÜöÖß ]/"," ", $text);
Da hatte aber wohl PHP was dagegen und hat einfach die Umlaute auch mit rausgeschmissen.
Die Funktion preg_replace(); kann nämlich nicht mit Umlauten die UTF8-Codiert sind umgehen. Zum glück gibts da die Funktion utf8_decode(); mit ihr kann man einen String der UTF-8-Codiert ist in ein für preg_replace(); verständliches Format umwandeln
Nach dem Ersetzen muss der String nur wieder nach UTF-8 Codiert werden und man kann wie gewohnt weiter machen.
Hier ein Stück Code:
Code:
$text = utf8_decode($text);
$text = preg_replace("/[^A-Za-z0-9äÄüÜöÖß /"," ", $text);
$text = utf8_encode($text);
$text = preg_replace("/[^A-Za-z0-9äÄüÜöÖß /"," ", $text);
$text = utf8_encode($text);
Das geht natürlich auch verschachtelt:
Code:
$text = utf8_encode(preg_replace("/[^A-Za-z0-9äÄüÜöÖß /"," ", utf8_decode($text)));

