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

  • [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

  • #2
    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?
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      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

      Kommentar


      • #4
        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).
        Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

        Kommentar


        • #5
          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

          Kommentar


          • #6
            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.
            Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

            Kommentar


            • #7
              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

              Kommentar


              • #8
                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 ...?
                [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                Kommentar


                • #9
                  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.

                  Kommentar


                  • #10
                    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...
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #11
                      Um nicht zu sagen er löst einen Parse Error aus.
                      Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

                      Kommentar


                      • #12
                        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

                        Kommentar

                        Lädt...
                        X