Allgemeine Informationen zu Elektronik, Platinen, Programmierung, PCs und mehr...

von   am   | 7 Kommentare | aktualisiert am  | 9933 mal gelesen
123 mal als PDF heruntergeladen

MySQL PHP Umlaute und Sonderzeichen in UTF-8

   mysql php umlaute und sonderzeichen utf-8

Suchen und Ersetzen von unerwünschten Zeichen in der Datenbank

mysql php umlaute und sonderzeichen utf-8

 

“Falsche” Zeichen in der Datenbank mit MySQL wieder korrigieren

Jeder, der schon einmal mit einer Website und Datenbank umgezogen ist, kennt das Problem: Aus irgendeinem Grund wurden einzelne Zeichen in Wörtern, die Sonderzeichen oder Umlaute enthalten, in der falschen Kodierung beim Importieren der SQL-Datei in die Datenbank geschrieben. Das kann man daran erkennen, dass sich Zeichen wie diese untergemischt haben und im Backend oder auch auf der Website so angezeigt werden:
¦, ¨, ?, ´, ¸, À, Â, Ã, Ä, Å, Æ, Ç, È, É, Ê, Ë, Ì, Î, Ñ, Ò, Ó, Ô, Õ, Ö, Ø, Ù, Ú, Û, Ü, Þ, ß, à , á, â, ã, ä, å, æ, ç, è, é, ê, ë, ì, í, î, ï, ð, ñ, ò, ó, ô, õ, ö, ø, ù, ú, û, ý, þ, ÿ

Diese Zeichen sind nicht UTF-8 kodiert worden, werden aber als UTF-8 Zeichen dargestellt.
Das kann eine Vielzahl an Gründen haben.

Ändern der Datenbankverbindungs-Kodierung

Ein Problem, das zu falschen Einträgen von Umlauten und Sonderzeichen in der Datenbank führt, wäre möglicherweise in der Übertragung der Daten zur Datenbank zu finden. Diese sollte immer einmalig nach dem Öffnen der Datenbankverbindung auf UTF-8 gesetzt werden:
mysql_connect();
mysql_query("SET NAMES 'utf8'");

Man kann mit verschiedenen Funktionen mittels PHP die Zeichen nun wieder korrekt darstellen lassen, wie zum Beispiel mit if(mb_detect_encoding($string) != 'UTF-8') { $string = utf8_encode($string); }
Aber schöner wäre es ja, wenn die falschen Umlaute und Sonderzeichen in der Datenbank dauerhaft korrigiert würden. Dazu habe ich das folgende PHP-Script geschrieben:

MySQL PHP Umlaute/Sonderzeichen fixen UTF-8/ISO

In der Zeile 31 werden die falschen Umlaute und Sonderzeichen angegeben, in der Zeile 34 die korrigierten Zeichen. Diese beiden Arrays kannst du deinen Bedürfnissen anpassen. Hier kann natürlich alles gesucht und entsprechend ersetzt werden.

Achtung !!

Achte bitte darauf, vorher ein Backup der Datenbank anzulegen und prüfe, ob die Zeichen in den Arrays auch korrekt sind.

Auf die UTF-8 Kodierung des PHP-Scripts achten

Wenn du das Script in einer PHP-Datei speicherst, muss auch hier die Kodierung der PHP-Datei stimmen. Die Kodierung der PHP-Datei muss auch UTF-8 sein, sonst werden Umlaute auch falsch dargestellt oder falsch an die Datenbankabfrage übermittelt. Die Kodierung kann z.B. mit Notepad++ überprüft und verändert werden: Hauptmenü->Kodierung->UTF-8.
 



Bewerte den Artikel, wenn du magst:
[Gesamt: 24 Durchschnitt: 4.9/5]

7 Kommentare

  1. Michael

    Thank you very much, you saved me quite some time searching for all the translations and writing something like this myself!

    One more definition i stumbled across:
    ‘´’ => ‘´’

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 8    Durchschnitt: 5/5]
  2. RG

    Hallo

    Sensationell. Genau das hab ich gesucht. Bestes Script der Woche für mich! Vielen Vielen Lieben DANK!

    RG.

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 1    Durchschnitt: 5/5]
  3. Harry Milatz

    Hi,

    danke für deinen Kommentar.

    Es freut mich, wenn ich damit helfen konnte ;)

    Gruss Harry

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 1    Durchschnitt: 5/5]
  4. B. Teuber

    Vielen Dank, du hast mir sehr geholfen!

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 1    Durchschnitt: 5/5]
  5. Stefan Kaufmann

    Hallo Harry, Danke für den Script. Hat mit sehr geholfen da bei einer Forenmigration die Umlaute nicht passten. DB war zwar in UTF-8, Header auch i.O. aber Post-text in DB in latin abgespeichert.

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 1    Durchschnitt: 5/5]
  6. rene

    Hallo,

    danke für der script, unter php 5.6 funktioniert es, bei php 7.4 kommt die html Ausgabe nut bis “UTF-8”. Woran kann das liegen?

    Gruß ré

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 0    Durchschnitt: 0/5]
    • Harry Milatz

      Hi,
      das liegt an $db = mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error());
      mysql_query("SET NAMES 'utf8'");
      mysql_select_db($db_name,$db) or die(mysql_error());>
      und den Abfragen $ergebnis_count=mysql_query($zaehlen);
      $num_rows = mysql_num_rows($ergebnis_count);
      .
      Also alles was mit “mysql_” zu tun hat.
      Das Script ist ja mittlerweile 6,5 Jahre alt und diese Teile musst du für PHP 7 anpassen.

      Gruss Harry

      Bewerte diesen Kommentar, wenn du magst:
      [Gesamt: 0    Durchschnitt: 0/5]

Kommentar verfassen

Du kannst auch mit einem deiner folgenden Profile kommentieren*:


* Zustimmung zur Datenschutzerklärung
Dieses Kommentarformular speichert Name, E-Mailadresse und Inhalt, sowie die IP-Adresse für maximal 60 Tage. Für detaillierte Informationen lies bitte unsere Datenschutzerklärung.
*

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert. - HTML ist erlaubt.Du kannst folgende HTML Tags und Attribute benutzen:
<a href="" title=""> <abbr title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strong> <pre style="" class="" title="" data-url=""> <span style="" class="" title="" data-url=""> .

Top
green

BILDSCHIRM OFF.
SPAREN ON!

Ein dunkler Monitor verbraucht im Gegensatz zu einem hellen bis zu 20% weniger Strom.
Daher spare ich jetzt Energie für dich.

Harrys Welt