Umlaute? Kein Problem!

Wer noch keine Problem mit Umlauten hatte, möge den ersten Stein werfen

Ganz ehrlich! Ich beneide jeden Entwickler, der noch kein Problem mit Umlauten hatte. Meine persönliche Meinung: Irgendwann fällt jeder mal damit auf die Schnauze. Die gängigsten Fälle sind eigentlich: Man liest aus einer ASCII Datei aus oder man bekommt die Ergebnis vom Webservice nicht im erwarteten Format. Umlaute sind echt ein leidiges Thema. Womit man aber nicht rechnet: Dass das Problem plötzlich auftritt.

Umlaute zerschossen nach der SSL Umstellung?

Nachdem ich meine Blogs auf SSL umgestellt habe, gab es ja noch das ein oder andere Problem. Bilder die über Subdomains eingebunden wurden und somit verhindert haben, dass das grüne Schloss angezeigt wurde. Piwik, das nicht mehr protokolliert hat, weil die Subdomain nicht teil des Zertifikates war. Der Redirect, der anfangs aus unerfindlichen Gründen nicht geklappt hat. Und natürlich externe APIs, die über https eingebunden werden wollten. Aber dann: Dann lief alles. Doch als ich gestern die neuen Filme nachtragen wollte. *BAM*. Springen mir lauter ‚?‘ ins Gesicht wo vorher noch Umlaute waren. Und das nur bei Daten, die ich bei meinen eigenen Seiten per PHP aus der Datenbank auslesen. Beim normalen Blog war alles OK. Doch: Datenbank wurde nicht geändert; Inhalt wurde nicht geändert; Skript wurde nicht geändert; Dann kann es eigentlich nur am SSL liegen? Doch warum sollte das so sein? Und ich war mir auch sicher, dass das nach der Umstellung schon korrekt war. Tja. Das SSL war gar nicht Schuld.

Umstellung von PHP 5.4 auf PHP 5.5: Umlaute zerschossen

PHP war der Übeltäter. Daran habe ich im ersten Moment gar nicht mehr gedacht. Das war der letzte Schritt, nachdem Piwik wieder gelaufen ist. Ich habe über die .htaccess Datei PHP 5.5 aktiviert, da Piwik die Version 5.4 mit dem nächsten Major Release nicht mehr unterstützt. Stellt man die Version wieder auf 5.4, waren die Umlaute wieder korrekt. Ich habe dann meinen Freund Google befragt und auch ein paar interessante Sachen gelesen. Der genaue Grund der Ursache ist mir aber nicht bekannt. Jedoch lässt sich das Problem mit einer einfachen Anweisung im PHP Code lösen, nachdem man die Verbindung zur Datenbank aufgebaut hat

1
mysql_set_charset('utf8');

Nachdem diese Methode aber auch schon als veraltet markiert wurde, habe ich das gleich mal alles auf die neuen Methoden umgestellt.

Bisher haben meine Statements in etwa so ausgesehen

1
2
3
4
5
6
7
8
9
10
11
12
if ($linkid=mysql_connect($DB_SERVER,$DB_USER,$DB_USERPASS))
{
  if (mysql_select_db($DB_NAME,$linkid))
  {
    $sql="SELECT COLUMN1, COLUMN2 FROM TABLE";
    if ($res=mysql_db_query($DB_NAME,$sql))
    {
      // Daten verarbeiten
    }
  }
  mysql_close($linkid);
}

Die angepasste Version, die dann auch mit PHP 5.5 bis hoch zur Version 7 noch kompatibel ist:

1
2
3
4
5
6
7
8
9
10
11
12
13
$mysqli = new mysqli($DB_SERVER,$DB_USER,$DB_USERPASS);
if (!mysqli_connect_errno()) 
{
  $mysqli->set_charset("utf8");
  $mysqli->select_db($DB_NAME);
  $sql="SELECT COLUMN1, COLUMN2 FROM TABLE";
  if ($res=$mysqli->query($sql))
  {
    // Daten verarbeiten
  }
  $res->close();
}
$mysqli->close();

Wichtig hierbei ist die vierte Zeile in der das Charset wieder auf UTF8 festgelegt wird.

Fazit

In den letzten Wochen habe ich wieder viel Zeit in meine Blogs investiert. Jetzt reicht es langsam wieder 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert