Frage

Meine Skripte sind definitiv in UTF-8 gespeichert. Ich mache PDO mit sofort mit "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8". Meine Tabellen verwenden InnoDB und werden mit utf8_general_ci zusammengestellt. Meine Seiten werden entweder mit dem gesendet Content-Type: text/html; charset=UTF-8 Header oder der <meta> Äquivalent.

Wenn ich PDO zum Speichern eines € € aus der HTTP -Eingabe oder einem String -Literal im Quellcode speichern kann, bin ich übrig c3 a2 e2 80 9a c2 ac Laut MySQL Workbench 5.2. Das Abrufen dieser Datenbank und das Anzeigen auf der Seite funktioniert einwandfrei. Doch in Phpmyadmin und Workbench, sehe ich €.

Wenn ich diese beiden Tools zum Speichern eines € verwenden kann, bin ich übrig geblieben e2 82 ac, was anscheinend die korrekte UTF-8-Darstellung ist, aber wenn ich versuche, dies mit PHP abzurufen und dann auszugeben, wird � angezeigt.

Meine Frage ist, wohin entsteht diese Diskrepanz und ist es möglich, dass meine Webseiten und Datenbank -Tools beide fehlerfrei funktionieren?

War es hilfreich?

Lösung

Die Charset -Richtlinie im DSN gilt tatsächlich für MSSQL. Ich musste einfach ausführen SET NAMES. Das tut mir leid.

Ich habe das so erreicht:

parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
                    $this->user, $this->password,
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));

Andere Tipps

Einfach, konvertieren Sie € € in ein HTML -Unternehmen € für den Superfix (aber Sie können das Problem mit anderen speziellen Chars erhalten)

Die andere Seite des Problems (und genauer gesagt) ist, die MySQL zu überprüfen charakter_set_server und die häufigste Ursache charakter_set_client - siehe auch: Verbindungsschelmen

Es ist auch wichtig zu beachten, dass das Meta -Äquiv keinen Unterschied macht, das Sie müssen stets Setzen Sie den Header ('Inhaltstyp: ...)

Da Ihre HTML -Seite korrekt ist, scheint es, dass Sie die richtigen Daten in der Datenbank speichern.

€ ist die UTF-8-Codierung des Euro-Zeichens, das als Windows-1252 falsch interpretiert wurde. Es scheint, dass Ihre Windows -Tools "ANSI" -Codierung anstelle der Datenbankcodierung verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top