kostenloser Webspace werbefrei: lima-city


Zeichenkodierung in MySQL-Datenbank

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    Hallo,

    ich habe derzeit ein Problem mit der Darstellung von Zeichen auf einer Homepage, die ich erstellt habe. vor einigen Wochen habe ich die Seite auf utf-8 umgestellt.
    Allerdings ist es schon eine Weile her, dass ich die Homepage erstellt habe und zu diesem Zeitpunkt hatte ich mir noch NULL Gedanken zum Thema Zeichenkodierung etc. gemacht.

    Daher ist es nun so, dass die MySQL-Datenbank lange Zeit in eigentlich allen Spalten die Zeichenkodierung latin1_general_ci enthielt.
    Meinen damaligen Programmierkünsten ist es nun auch zu verdanken, dass einige Datensätze, die in die Tabelle eingefügt wurden, zuvor nicht über die PHP-Funktionen htmlspecialchars() bzw. htmlentities() so bearbeitet worden sind, dass die Sonderzeichen gegen die entsprechenden Html-Entities (& ä ü ß etc.) ersetzt worden sind.
    Ich habe also in manchen Datensätzen der Datenbank tatsächlich ein "ä" oder ein "ü" stehen, in anderen stattdessen "ä" und "ü".
    Allerdings sollte es nun doch eigentlich so sein, dass, wenn ich sowohl in den Datenbankzellen als auch im PHP-Skript-Header also auch im <meta>-Tag der Seite überall die utf-8 Kodierung angegeben habe und auch die *.php-Dateien im utf-8 Format gespeichert habe, diese Zeichen dann - auch ohne Umwandlung in die entsprechenden Entities - richtig auf der Seite angezeigt werden müssten, oder nicht?
    Bei mir ist dies nicht der Fall - jedes Mal, wenn ich Zeichen aus der Datenbank erhalte, in denen die Sonderzeichen nicht als HTML-Entities vorlegen, werden diese als Fragezeichen, also "unbekanntes Symbol" dargestellt.

    Jemand eine Idee, wie sich dies ändern ließe? Im Zweifelsfall eine idee, wie ich evtl. die Daten in der DB nachträglich automatisiert anpassen könnte?

    Meine Einstellungen nochmal in Kürze
    - *.php Dateien, sowie alle, die in diese includiert werden, sind als UTF-8 kodiert gespeichert
    - header('Content-type: text/html; charset=utf-8'); zu Beginn jeder Seite
    - utf8_general_ci als Spaltentyp in den MySQL-Tabellen
    - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >     am Anfang jeder Seite


    Zu sehen ist das Problem bspw. unter http://www.amg-abi08.de/?seite=home&zeige=alle bei den älteren, d.h. unten befindlichen news.

    Vielen Dank,
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Versuch mal bevor du etwas in die Datenbank einträgst/ausliest:
    $query = "SET NAMES 'utf8'";
    mysql_query($query);


    Oder so http://www.php.net/manual/de/function.mysql-set-charset.php

    Aber ich denke die alten Einträge wirst du vergessen können...

    Beitrag zuletzt geändert: 3.3.2010 10:32:06 von fr3z3r
  4. thomasba

    Co-Admin Kostenloser Webspace von thomasba

    thomasba hat kostenlosen Webspace.

    Du kannst ja ein Script alle Datenbankeinträge durchgehen und mit html_entity_decode evtl. vorhandene Codierte Zeichen dekodieren und dann mit htmlentities wieder codieren und in der datenbank dann aktualisieren.

    So würde ich es machen ;-)
  5. Autor dieses Themas

    aldistammkunde

    Kostenloser Webspace von aldistammkunde, auf Homepage erstellen warten

    aldistammkunde hat kostenlosen Webspace.

    fr3z3r schrieb:
    Versuch mal bevor du etwas in die Datenbank einträgst/ausliest:
    $query = "SET NAMES 'utf8'";
    mysql_query($query);


    Oder so http://www.php.net/manual/de/function.mysql-set-charset.php

    Aber ich denke die alten Einträge wirst du vergessen können...


    Vielen Dank - funktioniert einwandfrei; Dass zusätzlich also auch noch der Typ der Verbindung auf utf8 gesetzt werden muss, war mir neu, aber jetzt ist alles so wie es soll.

    Okay, die Darstellung der Sonderzeichen in der DB ist nun etwas inkonsequent, aber da werde ich mir ja zur Not, wie thomasba schon sagte, mit html_entity_decode helfen können. Hauptsache, es wird erstmal alles wieder korrekt angezeigt :)


    Gruß,
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!