vieleicht hilft dir das hier weiter:

MySQL PHP Umlaute/Sonderzeichen fixen UTF-8/ISO

vom 2011/11/18
Jeder kennt das Problem, aus irgendeinem Grund wurden Wrter in der falschen Kodierung in die Datenbank geschrieben. Wenn das passiert ist, kann man daran erkennen, dass sich Zeichen wie diese untergemischt haben:
'¦, '¨, '?, '´, '¸, 'À, 'Á, 'Â, 'Ã, 'Ä, 'Å, 'Æ, 'Ç, 'È, 'É, 'Ê, 'Ë, 'Ì, 'Í, 'Î, 'Ï, 'Ñ, 'Ò, 'Ó, 'Ô, 'Õ, 'Ö, 'Ø, 'Ù, 'Ú, 'Û, 'Ü, 'Ý, 'Þ, 'ß, ' , 'á, 'â, 'ã, 'ä, 'å, 'æ, 'ç, 'è, 'é, 'ê, 'ë, 'ì, '*, 'î, 'ï, 'ð, 'ñ, 'ò, 'ó, 'ô, 'õ, 'ö, 'ø, 'ù, 'ú, 'û, 'ý, 'þ, 'ÿ Das Problem ist, dass diese Zeichen nicht utf8 kodiert worden sind, aber in utf8 abgespeichert worden sind, weil die DB Spalte so definiert worden ist (Kolation: utf8_general z.B.
Um dies zu vermeiden, sollte also vorher die Funktion
$string = utf8_encode($string); angewendet werden.
Die Codierung von Strings kann berprft werden mit der Funktion mb_detect_encoding (vielen Dank an FranKee).
echo mb_detect_encoding($string); Eine einfache rekusive Funktion um ein mehrdimensionales Array nach UTF-8 zu kodieren ist (performanter wre noch mit Refernzen zu arbeiten):
function utf8encodeArray($array) { foreach($array as $key => $value) { if(is_array($value)) { $array[$key] = utf8encodeArray($value); } elseif(!mb_detect_encoding($value, 'UTF-8', true)) { $array[$key] = utf8_encode($value); } } } Eine weitere Fehlerquelle, ist die bertragung der Daten zur Datenbank, diese sollte immer beim ffnen der Datenbankverbindung auf UTF-8 gesetzt werden:
mysql_query("SET NAMES 'utf8'");
Wenn es bereits zu spt ist und die Daten in der DB gespeichert worden sind, kann man die falschen Umlaute wie folgt ersetzen:
private function getUmlauteArray()
{
return array(
'ü'=>'',
'ä'=>'',
'ö'=>'',
'Ö'=>'',
'ß'=>'',
' '=>'',
'á'=>'',
'â'=>'',
'ã'=>'',
'ù'=>'',
'ú'=>'',
'û'=>'',
'Ù'=>'',
'Ú'=>'',
'Û'=>'',
'Ü'=>'',
'ò'=>'',
'ó'=>'',
'ô'=>'',
'è'=>'',
'é'=>'',
'ê'=>'',
'ë'=>'',
'À'=>'',
'Á'=>'',
'Â'=>'',
'Ã'=>'',
'Ä'=>'',
'Å'=>'',
'Ç'=>'',
'È'=>'',
'É'=>'',
'Ê'=>'',
'Ë'=>'',
'Ì'=>'',
'Í'=>'',
'Î'=>'',
'Ï'=>'',
'Ñ'=>'',
'Ò'=>'',
'Ó'=>'',
'Ô'=>'',
'Õ'=>'',
'Ø'=>'',
'å'=>'',
'æ'=>'',
'ç'=>'',
'ì'=>'',
'*'=>'',
'î'=>'',
'ï'=>'',
'ð'=>'',
'ñ'=>'',
'õ'=>'',
'ø'=>'',
'ý'=>'',
'ÿ'=>'',
'€'=>''
);
und mit der Funktion ersetzen:
public function fixeUmlauteDb()
{
$umlaute = $this->getUmlauteArray();
foreach ($umlaute as $key => $value)
{
$sql = "UPDATE table SET tracks = REPLACE(row, '{$key}', '{$value}') WHERE row LIKE '%{$key}%'";
}
}
Achtung: Das Script funktioniert nur, wen die Codierung der PHP Datei UTF-8 ist (kann z.B. mit Notepad++ gecheckt/verndert werden: Hauptmen->Kodierung->UTF-8 ). ISO codierte Dateien funktionieren leider nicht, weil 30% der Umlaute als ? dargestellt werden. Das Script funktioniert also nur mit einer UTF8 codierten Projekt.
Quelle: http://www.sebastianviereck.de/mysql...chen-utf8-iso/