Sonderzeichen in der mySQL-Tabelle
Habe ich einige Texte in Französisch (mit Akzent-Zeichen wie "é"), gespeichert in einer MySQL-Tabelle, deren collation utf8_unicode_ci (sowohl die Tabelle und die Spalten), will ich die Ausgabe auf eine HTML5-Seite.
Die HTML-Seite charset ist UTF-8< meta charset="utf-8" />) und die PHP-Dateien selbst sind codiert als "UTF-8 ohne BOM" (ich benutze Notepad++ unter Windows). Ich benutze PHP5 auf Wunsch die Datenbank und generieren des HTML-Codes.
Jedoch auf der output-Seite, die Sonderzeichen (wie z.B. "é") falsch angezeigt und sind ersetzt durch "�".
Wenn ich durchsuchen der Datenbank (via phpMyAdmin) die gleichen Zeichen mit Akzent-display in Ordnung.
Was vermisse ich hier?
(Hinweis: eine änderung der-Seite-Codierung (über Firefox "web developer" - Menü) ISO-8859-1 löst das problem... außer für die speziellen Charaktere auf, die direkt in den PHP Dateien, welche sich nun verdorben. Aber trotzdem würde ich eher verstehen, warum es nicht funktioniert, als UTF-8 als eine änderung der Codierung, ohne zu verstehen, warum es funktioniert. ^^;)
InformationsquelleAutor s427 | 2012-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erlebte ich das gleiche problem vor, und das, was ich habe sind die folgenden
1) Verwenden Sie notepad++(kann fast passen auf jede Codierung) oder eclipse und sicher sein, in speichern oder öffnen Sie Sie in UTF-8 ohne BOM.
2) die Codierung in PHP-header, mit
header('Content-type: text/html; charset=UTF-8');
3) entfernen Sie alle zusätzlichen Leerzeichen am Anfang und Ende meiner PHP-Dateien.
4) alle meine Tabellen und Spalten Kodierung
utf8mb4_general_ci
oderutf8mb4_unicode_ci
per PhpMyAdmin oder einer beliebigen mySQL-client, den Sie haben. Ein Vergleich der beiden Codierungen verfügbar sind hier5) legen Sie die mysql-connection-charset auf UTF-8 (ich nutze PDO für die Datenbank-Verbindung )
oder einfach führen Sie die SQL-Abfragen, bevor Sie Holen alle Daten
6) verwenden Sie ein meta-tag
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7) die Verwendung einer bestimmten Sprache code für Französisch
<meta http-equiv="Content-language" content="fr" />
8) ändern Sie die html-element lang-Attribut, um die gewünschte Sprache
und aktualisieren werden, dies, weil ich hatte wirklich eine harte Zeit, dieses problem zu lösen, bevor ich da war, den Umgang mit japanischen Zeichen in meiner bisherigen Projekte
9) Einige Schriftarten sind nicht verfügbar auf dem client-PC verwenden, benötigen Sie Google fonts auch auf Ihre CSS -
10) nicht am Ende Ihrer PHP-source-Datei mit
?>
HINWEIS:
aber wenn alles, was ich sagte oben nicht funktioniert, versuchen Sie Ihre encoding-je nach Charakter-set, die Sie wirklich anzeigen möchten, für mich ist alles, was zu
SHIFT-JIS
um alle meine japanischen Zeichen und es funktioniert wirklich gut. Aber mitUFT-8
muss Ihre PrioritätSET NAMES
, ein häufiger FehlerYep,
SET NAMES
ist wahrscheinlich sein problem.In der Tat
SET NAMES
fehlte, und das hinzufügen es war genug, um mein problem beheben. Da ich nicht verwenden, PDO, ich hatte die Verwendung der folgenden syntax:mysql_query('SET NAMES utf8');
. Vielen Dank für deine ausführliche Antwort!auch ich erlebte das gleiche, und ich werde nicht zulassen, jemand leiden die gleiche Sache wieder 🙂
Sie können auch tack auf eine
;charset=UTF8
zu Ihremnew PDO(...)
nennen. So etwas wie dieses,$dbo = new PDO('mysql:host='.$dbhost_name.';dbname='.$database.';charset=UTF8', $username, $password);
InformationsquelleAutor Mp de la Vega
Dies funktioniert für mich
utf8_general_ci
UTF-8 without BOM
$mysqli->query('SET NAMES utf8');
nachdem die Verbindung zur Datenbank im PHP-Datei< meta charset="utf-8" />
in Ihre HTML-sFunktioniert perfekt.
SET NAME
fehlt.Speichern ohne BOM am erhabenen es zu arbeiten!!!!!!!!!
Danke Mann!, mehr synthetisiert, die als erste Antwort. 🙂
$mysqli->query('SET NAMES utf8');
für mich gearbeitet! Danke! 🙂mysql_query('SET NAMES utf8');
es fest für mich. danke.InformationsquelleAutor Vucko
Wenn Ihr
php.ini
default_charset
ist nicht auf UTF-8 eingestellt ist, müssen Sie verwenden eineContent-type
definieren Sie Ihre Daten. Gelten die folgenden header am Anfang der Datei(en) :Haben Sie immer noch Probleme mit der Codierung, die Ursache kann eine der folgenden sein:
default_encoding
- parameter in-Parameter.ini)<form>
charset-problem (überprüfen, dass es gesendet wird als utf-8)<html>
charset-problem (wo kein enctype gesetzt ist, in Ihrer html-Datei)Content-encoding:
problem (wo die falsche Codierung gesendet von Apache).SET NAMES
Befehl aus, nachdem die Datenbank-Verbindung.InformationsquelleAutor Alain Tiemblo
NAMEN für mich gearbeitet.
Mein Problem war in einer meiner Seiten Bearbeiten das Feld mit dem fremden Zeichen nicht angezeigt wird, auf die Produktion von web-Seiten, es war kein problem.
InformationsquelleAutor Paul R
Einfügen Zeile unterhalb in Ihre website ein-header -
header('Content-Type: text/html; charset=utf-8');
Seite (Datei) sollte gut Aussehen.
Wenn gut aussieht, gehen hier für mysql-Verhalten nach (SET_NAMES).
SET NAME
.InformationsquelleAutor Xfile
Ich weiß, Sie haben bereits eine Antwort. Das ist toll. Aber seltsamerweise ist keiner von diesen Antworten, die mein Problem gelöst. Ich möchte meine Antwort zum nutzen des anderen, die Begegnung mit den gleichen Fragen.
Ich hatte auch die gleichen Probleme wie der OP, mit Bezug auf französische Akzente in eine Mehrsprachige Anwendung.
Aber ich traf dieses Problem zum ersten mal hatte ich mich übergeben (französischer Akzent) Daten als Segmente in AJAX-Aufrufe.
Ja, müssen wir die Datenbank mit UTF8. Aber die Tatsache, dass AJAX-Aufrufe hatte query-strings (in meinem Fall Segmente, da bin ich mit CodeIgniter), musste ich einfach codieren der französische text.
Zu diesem Zweck auf der client-Seite mit Javascript encodeURI () - Funktion mit Ihren Daten.
Ist und du das in PHP, verwenden Sie einfach
urldecode($MyStr)
wo Daten empfangen wurden, als Parameter.Hoffe, das hilft.
InformationsquelleAutor itsols