Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] UTF-8 und die ewigen Probleme

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • hotte
    hat ein Thema erstellt [Erledigt] UTF-8 und die ewigen Probleme.

    [Erledigt] UTF-8 und die ewigen Probleme

    Hallo ihrs,

    ich weiß, dass dieses Thema im Internet schon zig millionen Male durchgekaut wurde. Ich verzweifel allerdings gerade daran, Sonderzeichen über PHP in eine MySQL-Tabelle zu kriegen.

    Zur DB-Struktur:
    - Tabelle, sowie einzelne Spalten haben als Collation "utf8_general_ci).
    - Die Spalte, in der die Sonderzeichen hinzugefügt werden sollen, ist vom Type "Text".

    Zu den php-Dateien:
    - alle Dateien auf dem Webserver sind UTF-8 kodiert (ohne BOM)
    - im HTML-Header ist der meta-Tag mit dem Charset "UTF-8" vorhanden
    - bevor Daten in die DB geschrieben werden, führe ich ein mysql_query('SET NAMES "utf-8"); aus

    Wenn ich nun den Befehl INSERT INTO table(column) VALUES("ä"); aus einer php-Datei heraus an die DB sende, wird in der DB nur "ä" eingefügt.

    Das Ganze klappt allerdings nur auf dem Webserver im Internet nicht.

    Auf meinem lokalen Webserver funktioniert das Eintragen hingegen korrekt.

    Wenn ich allerdings auf dem Webserver im Internet die SQL-Query über PHPMyAdmin abschicke, sind die Werte korrekt.

    Was mache ich falsch?

    VG
    hotte

  • hotte
    antwortet
    So. Ich habs nun endlich hinbekommen:

    Und zwar mit folgender mysql_query:
    mysql_query("SET NAMES SET 'utf8'");
    mysql_query("SET character_set_client = 'utf8'");
    mysql_query("SET character_set_connection = 'utf8'");

    Danke für eure Hilfe

    VG

    Einen Kommentar schreiben:


  • mimomamu
    antwortet
    Um nicht zu sagen er löst einen Parse Error aus.

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Zitat von hotte Beitrag anzeigen
    Folgender php-Code schreibt ein korrektes Sonderzeichen in die Tabelle:
    PHP-Code:
        $sql 'INSERT INTO $cfg['mysql']['table'](title) VALUES("ä")'
    Diese Code trägt überhaupt nichts in die DB ein...

    Einen Kommentar schreiben:


  • hotte
    antwortet
    Zitat von ChrisB Beitrag anzeigen
    Und im phpMyAdmin hast du die Kodierung der Verbindung auch auf UTF-8 eingestellt ...?
    Die Verbindung im phpMyAdmin ist auf UTF-8 gesetzt, ja.

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    Zitat von hotte Beitrag anzeigen
    Na ich lade PhpMyAdmin und lass mir die Einträge anzeigen.
    Und im phpMyAdmin hast du die Kodierung der Verbindung auch auf UTF-8 eingestellt ...?

    Einen Kommentar schreiben:


  • hotte
    antwortet
    Zitat von mimomamu Beitrag anzeigen
    Es scheint als ob du Daten explizit UTF-8-kodierst. Wenn die Daten bereits in UTF-8 vorliegen, dann führt eine erneute Kodierung zu dem von dir beobachteten Effekt.
    Ich komm grad überhaupt nicht mehr klar. Ich find den Fehler einfach nicht.

    Folgender php-Code schreibt ein korrektes Sonderzeichen in die Tabelle:
    <?php
    $mycon = mysql_connect($cfg['mysql']['host'], $cfg['mysql']['username'], $cfg['mysql']['password']);
    if (!$mycon) {
    die('Verbindung fehlgeschlagen.');
    }
    mysql_select_db($cfg['mysql']['database'], $mycon);

    $sql = 'INSERT INTO $cfg['mysql']['table'](title) VALUES("ä")';
    $res = mysql_query($sql, $mycon);
    if (!$res) { die('Ungültige Abfrage.';}
    ?>

    Wie ihr seht, steht da nix mit Umcodierung in UTF-8. Die Datei hab ich in Windows erzeugt und liegt somit im ANSI-Format vor.
    Sehe ich das richtig, dass MySQL ankommende Daten bevor sie in die DB eingetragen werden, mit der entsprechend angegebenen Collation der Spalte konvertiert?

    Ich blick hier langsam net mehr durch^^.

    LG

    Einen Kommentar schreiben:


  • mimomamu
    antwortet
    Es scheint als ob du Daten explizit UTF-8-kodierst. Wenn die Daten bereits in UTF-8 vorliegen, dann führt eine erneute Kodierung zu dem von dir beobachteten Effekt.

    Einen Kommentar schreiben:


  • hotte
    antwortet
    Zitat von mimomamu Beitrag anzeigen
    Dann bleibt ja nur noch die Frage unbeantwortet (deren Antwort mich übrigens auch brennend interessiert).
    Na ich lade PhpMyAdmin und lass mir die Einträge anzeigen. Dann steht dieser 2-Byte-Wert drin, wenn ich SQL über mein php-Skript ausführe. Wenn ich hingegen die exakt gleiche SQL Abfrage über phpMyAdmin sende, dann wird das Sonderzeichen korrekt angezeigt.

    Ich sehe es im Übrigen auch, wenn ich die Tabelle wieder auf meiner Seite ausgeben lass. Alle Sonderzeichen, die über phpMyAdmin eingetragen wurden, sind korrekt. "ur die Sachen, die ich über mein php-Skript laufen lasse stimmen nicht.

    VG

    Einen Kommentar schreiben:


  • mimomamu
    antwortet
    Zitat von hotte Beitrag anzeigen
    Das Eintragen funktioniert damit nämlich auch nicht.
    Dann bleibt ja nur noch die Frage
    Zitat von ChrisB Beitrag anzeigen
    Wie kontrollierst du denn das, was in die DB eingetragen wurde?
    unbeantwortet (deren Antwort mich übrigens auch brennend interessiert).

    Einen Kommentar schreiben:


  • hotte
    antwortet
    Zitat von ChrisB Beitrag anzeigen
    Wie kontrollierst du denn das, was in die DB eingetragen wurde?


    Dass eine ggf. per HTTP im Content-Type-Header gemachte Angabe höhere Priorität hast, hast du berücksichtigt?
    Ahh. Daran hab ich in keiner Sekunde gedacht.
    Ich habe nun in der entsprechenden PHP-Datei folgenden Befehl hinzugefügt:
    header('Content-type: text/html; charset=utf-8');

    War das richtig? Das Eintragen funktioniert damit nämlich auch nicht.

    VG

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    Zitat von hotte Beitrag anzeigen
    Wenn ich nun den Befehl INSERT INTO table(column) VALUES("ä"); aus einer php-Datei heraus an die DB sende, wird in der DB nur "ä" eingefügt.
    Das sind die zwei Bytewerte, die in UTF-8 ein ä darstellen - nur in einer anderen Kodierung interpretiert.

    Wie kontrollierst du denn das, was in die DB eingetragen wurde?

    - im HTML-Header ist der meta-Tag mit dem Charset "UTF-8" vorhanden
    Dass eine ggf. per HTTP im Content-Type-Header gemachte Angabe höhere Priorität hast, hast du berücksichtigt?

    Einen Kommentar schreiben:

Lädt...
X