UTF-8: zeigt korrekt in der Datenbank, jedoch nicht im HTML-trotz utf-8-charset
Ich benutze MySQL 5.1 und geladen von einer UTF-8 dekodiert txt-Datei etwa 2,7 mil Zeilen in einer Tabelle, die sich selbst erklärt wird utf8_unicode_ci
und auch alle char-Felder deklariert utf8_unicode_ci
mit LOAD DATA INFILE
...
In der Datenbank selbst die Charaktere scheinen alle richtig zu sein, alles sieht nett aus. Allerdings, wenn ich drucken Sie Sie mithilfe von php die Zeichen zeigen sich als ???, obwohl ich utf-8-Deklaration im HTML-Kopf:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
In einer anderen Tabelle (utf-8), wo ich text aus einer vorgelegten form, die Charaktere wirken seltsam in der Datenbank, sondern werden korrekt angezeigt wieder, wenn ich drucken Sie mit SELECT...
.
So, ich Frage mich: was ist falsch? Sind UTF-8
chars korrekt angezeigt, in der Datenbank oder seltsam, aber wenn Sie SELECT
Sie wieder Sie sind, OK? Oder wo ist das problem (beim laden der Datei in die db, in der HTML-oder irgendwo dazwischen)??
Vielen Dank für jeden Hinweis oder Vorschlag! 🙂
- Sind Sie auf der Erteilung der
SET NAMES utf8
Befehl vor dem ausführen von MySQL-Abfragen? Sind Sie sicher, dass Ihre Seite tatsächlich gerendert wird als utf-8 (wenn es ein HTTP-headerContent-Type: iso-8859-1
Browser nicht über das gewinnen sollte)? - Außerdem schlage ich vor Sie zu Lesen joelonsoftware.com/articles/Unicode.html , stellen Sie sicher, dass Sie ÜBERALL utf8-Codierung, MySQL-Speicher, MySQL Verbindung, PHP selbst, response-header, ...
- naja, das problem ist, dass ich geladen, die Daten aus einer Datei, und wie ich hatte Probleme mit dem korrekten Pfad zum Dateinamen, habe ich die Schnittstelle auf phpmyadmin anstatt einer reinen SQL-Befehl (LOAD DATA INFILE)... und was meinst du mit dem http-header? sorry, wenn dies ist eine blöde Frage, aber ist es das gleiche wie die http-equiv="Content-Type"?
- In Ihrem PHP-code, wenn Sie die db-Verbindung, die Sie benötigen, um ausführen
SET NAMES utf8
zu sagen, MySQL werden Sie das senden und empfangen von Daten in UTF-8. Für die HTTP-Header, ist es möglich, Ihre php - /Apache konfiguriert ist zum senden einesContent-Type: text/html;charset=iso-8859-1
- Kopfzeile mit der Antwort. Wenn das passiert, kann der browser verlassen werden verwirrt, wenn es Rendern soll die Seite als iso-8859-1 oder utf-8. - thx für den link zu diesem interessanten Artikel!
- also, in der Datenbank selbst, die chars sollten richtig angezeigt werden, oder nicht?
- Überprüfen Sie auch Ihr editor die Zeichenkodierung. Was charset erklären Sie in Ihren html -, kann es nicht erfüllen, was wir Sie erwarten, es sei denn, Ihr editor die Zeichenkodierung ist die gleiche.
- thx, ja wie gesagt der text-Datei in utf-8
- Ich wusste nicht, dass die text-Datei, aber die HTML-Datei-Codierung. Da es scheint, dein problem ist nicht die text-Datei, aber deine PHP/HTML.
- ok danke alle für Eure Vorschläge! kann mir jemand die post eine Antwort auf die Frage, ob die chars sollten korrekt angezeigt werden in der db selbst (also z.B. á wird gezeigt, wie á und nicht ö, À oder sth ähnlich und dann wird richtig gedruckt? 🙂
- Sie sollten dies Lesen: kunststube.net/frontback . Wenn phpMyAdmin zeigt Ihre eingegebenen Daten als korrekt Unicode-text, dann meine Wette ist, dass Sie nicht tun
SET NAMES utf8
nach dem anschließen. - sorry vielmals für die sehr späte Antwort... leider konnten wir nicht wieder dieses Problem früher, aber wollte Sie wissen lassen, Sie hatten Recht, mit SET NAMES utf8 es wirklich zeigt alle Zeichen korrekt... als Sie noch nicht geschrieben eine Antwort, könnte Sie veröffentlichen, eine Antwort, so konnte ich es akzeptieren? ich danke Ihnen sehr viel wieder! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: MySQL ist
utf8
charset ist begrenzt, es unterstützt nur die Unicode-Zeichen in der BMP, die nicht mehr als drei bytes. Sie sollten mitutf8mb4
statt.SET NAMES utf8
SET NAMES utf8mb4
Befehl, um die MySQL nach dem herstellen der Verbindung vor dem ausführen eines MySQL-Abfragen.Content-Type: text/html;charset=iso-8859-1
, Browser nicht über das gewinnen sollte).utf8
mitutf8mb4
wo MySQL betroffen ist).Wenn phpMyAdmin zeigt Ihre eingegebenen Daten als korrekt Unicode-text, dann meine Wette ist, dass Sie nicht tun
SET NAMES utf8
nach dem anschließen.Versuchen, verwenden Sie diesen code, nachdem Sie eine Verbindung zur Datenbank, aber befor Sie erhalten Daten
$db = new mysqli($host, $username, $password, $dbname);