preg_replace und utf8 Umlaut Problemlösung

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

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:
<pre>

$text = utf8_decode($text);
$text = preg_replace("/[^A-Za-z0-9äÄüÜöÖß /"," ", $text);
$text = utf8_encode($text);

Das geht natürlich auch verschachtelt:

$text = utf8_encode(preg_replace("/[^A-Za-z0-9äÄüÜöÖß /"," ", utf8_decode($text)));

 

Set/Enum Feld bei Mysql mit PHP auslesen

Ich habe schon öfters das Problem gehabt das ich in einer Tabelle, Felder als Typ Enum erstellt habe. Irgendwann kam dann eine Änderung, es wurde neue möglichkeiten hinzugefügt, oder es wurden mögliche Zustände entfernt. In der Anwendung wurden aber dann HTML-Selectfelder so gelassen wie sie waren, sprich mit alten Werten und es gab plötzlich Fehler.

Um diesem Problem aus dem Weg zu gehen kann man sich solche Datenbankfelder auslesen und anhand dessen die Selectformulare dynamisch zusammenbauen.

Ich gehe mal davon aus ihr könnt eine Verbindung zu einer MySql-Datenbank aufbauen und anfragen dort hin schicken, ansonsten schaut mal hier: Verbindung zu MySQL aufbauen + Abfrage

Wie sieht das ganze nun aus:

$sql = "SHOW COLUMNS FROM foo LIKE 'bar'";
$temp = mysql_query($sql);

if(mysql_num_rows($temp) > 0)
{
    $row=mysql_fetch_row($temp);
    $werte = explode("','",preg_replace("/(enum|set)('(.+?)')/","\2",$row[1]));
}

Dieses Stückchen Code gibt euch nun ein Array mit den verschiedenen Möglichkeiten zurück. Dieses Array könnt ihr dann mit einem foreach() durchgehen.

Nochmal kurz zur Erklärung

$sql = "SHOW COLUMNS FROM foo LIKE 'bar'";

foo ist hierbei eure Tabelle in dem sich das Feld bar befindet.

Viel Spass damit!