PHP/MySQL-encoding-Probleme. � statt bestimmter Zeichen
Ich bin gekommen, über einige Probleme bei der Eingabe von bestimmten Zeichen, die in meine mysql-Datenbank mit php. Was ich mache, ist die Einreichung Benutzer eingegebenen text in eine Datenbank. Ich kann nicht herausfinden, was ich ändern muss, damit jede Art von Zeichen in die Datenbank und bedruckt wieder heraus über php, wie es wohl.
Meiner MySQL-collation: latin1_swedish_ci
Kurz bevor ich Sie senden Sie den text an die Datenbank aus meinem Formular verwende ich mysql_real_escape_string() auf die Daten.
Beispiel unten
diesem text:
�People are just as happy as they make up their minds to be.�
� Abraham Lincoln
ist wohl so Aussehen:
“People are just as happy as they make up their minds to be.”
― Abraham Lincoln
- Warum sind Sie nicht mit einem UTF-8 collation?
- Latin1 ist nicht UTF-8. So ist es keine überraschung, dass Zeichen, die nicht unter latin1 wie
“
und―
sind Mojibake würde. - latin1 ist denke ich mal der Standard und ich habe nie, und weiß noch nicht wirklich verstehen, die Sortierungen sind die besten zu verwenden, so habe ich immer diese verwendet. Ich habe versucht, UTF-8 collation vor, aber es schien nicht das problem zu beheben
- Das ist, weil es nicht die ganze Lösung. Das gesamte Programm von der Spitze bis zum Heck muss UTF-8 verwenden.
- Beachten Sie, dass die Tabelle Sortierung ist nicht das gleiche wie in Tabelle charset. Die Sortierung lediglich definies die Reihenfolge (in der Regel locale-abhängig, wie die Schwedische, als haben Sie zunächst auch) von den Charakteren. Also selbst wenn Sie versuchen, verwenden Sie die Tabelle Sortierung für UTF-8, es wird nicht akzeptiert UTF-8-Zeichen, wenn Sie nicht eine Tabelle charset von UTF-8.
- Gut, wie würde ich meine ganze Website auf utf-8? So weit ich bin mir bewusst, ich habe nicht definiert, jede Sorte, außer meinem meta ist: <meta http-equiv="Content-Type" Content="text/html; charset=utf-8" />
- Lesen Sie die PHP - /MySQL-Handbuch Hinweise. Das HTML-meta-tag ist übrigens nur verwendet, wenn der Anwender speichert die Webseite auf der lokalen Festplatte die Datei-system und dann öffnet es von dort durch
file://
URL. Es ist nicht genutzt, wenn die Seite über servierthttp://
. Stattdessen werden die echten HTTP-header der Antwort ist gehört worden. Siehe auch HTML-Spezifikation Kapitel 5.2.2. - Ich habe mir die Anleitung mit etwas Glück zu finden, was ich brauche.
- Musste nachschlagen mojibake auf wikipedia - die hatte eine erstaunliche, erstaunliche Geschichte in Verbindung mit dem Artikel - en.wikipedia.org/wiki/... - als Programmierer, man sollte alle Lesen, und erfahren Sie, warum unicode ist wichtig 🙂
- vielen Dank für das teilen dieser Begriff!
- Würde die änderung der Tabelle die Sortierung Durcheinander etwas in den Spalten? Ich merke es nicht geht, um wieder die ursprünglichen Zeichen, aber ich möchte es nicht versauen anderen Zeichen als gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie von anderen erwähnt, müssen Sie zum konvertieren zu UTF8 von Ende zu Ende, wenn Sie wollen, um Unterstützung "besonderen" Charaktere. Dies bedeutet, dass Ihre web-Seite, PHP -, mysql-Anbindung und mysql-Tabelle. Die web-Seite ist ziemlich einfach, einfach verwenden Sie das meta-tag für UTF-8. Ideal in Ihrem Header würde sagen, auch UTF8.
Legen Sie Ihre PHP UTF8 verwenden. Es würde wohl irgendwie funktionieren, aber es ist eine gute Maßnahme um dies zu tun:
Für mysql, die Sie konvertieren möchten Ihre Tabelle auf UTF8, keine Notwendigkeit zu exportieren/importieren.
Können Sie, und sollten, konfigurieren Sie mysql standardmäßig utf-8. Aber Sie können auch die Abfrage ausführen:
als die erste Abfrage nach der Herstellung einer Verbindung und wird das "konvertieren" zu Ihrer Datenbankverbindung auf UTF8.
Sollte die Lösung für alle Ihre Zeichen-display Probleme.
Die wahrscheinlichste Ursache des Problems ist, dass die Datenbank Verbindung eingestellt ist
latin1
aber Sie füttern Sie text in UTF-8 codiert. Der einfachste Weg, um dieses Problem zu lösen ist, konvertieren Sie Ihre Eingabe in das, was der Kunde erwartet:(Was ruft MySQL
latin1
ist windows-1252 in den rest der Welt.) Beachten Sie, dass viele Zeichen, wie Anführungszeichen, Bindestrich U+2015, Sie verwenden es, nicht dargestellt werden können in diesem Kodierung und umgewandelt werden in etwas anderes. Idealerweise sollten Sie ändern Sie die column-Codierungutf8
.Alternative Lösung: setzen Sie die Datenbank-Verbindung zu
utf8
. Es spielt keine Rolle, wie die Spalten kodiert werden: MySQL intern wandelt text aus der Verbindungs-Codierung in den Speicher der Codierung, können Sie die Spalten wielatin1
wenn Sie wollen. (Wenn Sie das Angebot Bindestrich U+2015 verwandelt sich in ein Fragezeichen?
weil es nicht inlatin1
)Verbindungen festlegen der Codierung hängt davon ab, welche Bibliothek Sie verwenden: wenn Sie die Verwendung des veralteten MySQL-Bibliothek ist es mysql_set_charset, wenn MySQLi-es ist mysqli_set_charset, wenn PDO hinzufügen
encoding=utf8
um den DSN.Wenn Sie dies tun, müssen Sie die gewünschte Kodierung auf UTF-8 mit dem Content-Type-header.
Sonst würdest du das gleiche problem mit dem browser: die Einspeisung von text in UTF-8 kodiert, wenn es etwas anderes erwartet:
htmlspecialchars
es nicht Anfassen Unicode-Zeichen. Wenn Sie verwenden möchtenhtmlentities
Sie haben, verwenden Sie die encoding-argument.Den Lösungen hilfreich sind wenn von vorne anfangen. Putting alle möglichen verbindungen zu UTF-8 ist tatsächlich am sichersten. UTF-8 ist die am meisten verwendeten Zeichensatz auf dem Netz für eine Vielzahl von Gründen.
Einige Anregungen und ein Wort der Warnung:
Baut die 2 array benötigt für die magic:
Nun den Aufbau der Routinen, die Sie brauchen: (Tabellen->)Zeilen->die Felder und in jedem Feld aufrufen
Schließlich aufbauen und senden der Abfrage:
ändern Sie die MySQL-Sortierung utf8_unicode_ci oder utf8_general_ci, einschließlich der Tabelle und der Datenbank.
á
vorä
oder die andere Weise Runde. Es nicht definieren, das charset von der Tabelle. Für diese brauchen Sie zum ändern der Tabelle charset.Müssen Sie Ihre Datenbank in utf-8 ja. Es gibt viele Möglichkeiten, es zu tun. Durch changin die config-Datei per phpmyadmin oder durch Aufruf der php-Funktion (sorry, Speicher leer) direkt vor dem insert-und update-mysql.
Leider, ich denken Sie müssen Sie erneut eingeben alle Daten, die Sie eingegeben haben, bevor.
Eine Sache, die Sie müssen auch wissen, aus persönliche Erfahrung, stellen Sie sicher, dass alle Tabellen mit Bezug haben die gleiche Sortierung, oder Sie werden NICHT in der Lage, sich Ihnen ANZUSCHLIEßEN.
als Referenz: http://dev.mysql.com/doc/refman/5.6/en/charset-syntax.html
Ich kann auch eine apache-Einstellung. Wir erfahren habe das gleiche Problem auf " free-hosting-server als auch auf meinen Bruder auf den server. Einmal eingeschaltet, um einen anderen server, alle charater wurde ordentlich. Verfiy Sie die apache-Einstellung, sorry, aber ich kann nicht bting mehr Licht auf die apache-config.
Alles loswerden müssen Sie nur befolgen Sie diese zwei Punkte, jedes problem in Bezug auf spezielle Sprachen der Zeichen gelöst werden.
1 - definieren Sie die Sortierung Ihrer Tabelle ist utf8_general_ci.
2 - definieren
<meta http-equiv="content-type" content="text/html; charset=utf-8">
im HTML nach dem head-tag.2 - definieren Sie die
mysql_set_charset('utf8',$link_identifier);
in der Datei, wo Sie aus der Verbindung mit der Datenbank und rechts nach der Auswahl der Datenbank wie 'mysql_select_db' verwenden diese "mysql_set_charset' dies wird erlauben Ihnen das hinzufügen und abrufen von Daten richtig in was auch immer die Sprache es ist.