Die Lösung UTF8 & Akzente Inkompatibilität
Ich habe ein PHP script, welches die user-Inhalte in eine mysql-Datenbank (PHP 5.4, mysql 5.5.31)
Alle string-bezogene Felder in meiner Datenbank haben utf8_unicode_ci
als Sortierung.
Meine (vereinfachte) code sieht wie folgt aus:
$db_handle = mysql_connect('localhost', 'username', 'password');
mysql_select_db('my_db');
mysql_set_charset('utf8', $db_handle);
//------ INSERT: First example -------
$s = "je viens de télécharger et installer le logiciel";
$sql = "INSERT INTO my_table (post_id, post_subject, post_text) VALUES (1, 'subject 1', '$s')";
mysql_query($sql, $db_handle);
//------ INSERT: Second example -------
$s = "EPrints and العربية";
$sql = "INSERT INTO my_table (post_id, post_subject, post_text) VALUES (2, 'subject 2', '$s')";
mysql_query($sql, $db_handle);
//-------------
mysql_close($db_handle);
Das problem ist, der erste insert (lateinischer text mit der é
Akzente) schlägt fehl, wenn ich diese Zeile auskommentieren:
mysql_set_charset('utf8', $db_handle);
Aber die zweite Abfrage (mix aus latin & Arabisch Inhalt) schlägt fehl, es sei denn, ich nenne mysql_set_charset('utf8', $db_handle);
Ich ve wurde kämpfen mit diesem für 2 Tage jetzt. Ich dachte UTF8 unterstützt, die Zeichen wie die Akzente, aber natürlich geht es nicht!
Wie kann ich dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
mysql_set_charset('utf8', $db_handle)
sagt der Datenbank, dass die Daten, die Sie gehen zu senden, wird es in UTF-8 codiert. Wenn das Ergebnis versaut ist, das bedeutet, dass Sie nicht in der Tat senden von UTF-8 codiertem text. Doppelte überprüfung der Codierung von dem, was Sie senden.Ich einfach gut tut.
Sehen Was Jeder Programmierer Absolut Positiv Muss Wissen Über Kodierungen Und Zeichensätzen Arbeiten Mit Text und Umgang Mit Unicode-Von Vorne Nach Hinten In Eine Web-App.
iconv
. Aber die Frage auch ist: wie kann ich zuverlässig tun? Ich landete mit diesen code, es scheint zu funktionieren, aber (1) ich bin mir nicht sicher, wie zuverlässig es ist, und (2) es wird keine Unterstützung alle/gemeinsame Zeichensätze. Pflege zu kommentieren wenn das ist genug text kommen aus allen verschiedenen teilen des Planeten?Ist die PHP-text in UTF-8? Dies betrifft die Codierung der editor. Wenn ja, dann werden die bytes in dem string-literal sollten schon okay sein.
Es scheint der Fall zu sein, wie Arabisch geschrieben wird auch.
Verwenden prepared statements für die SQL. Dies hat mehrere Vorteile: - Sicherheit (SQL-injection), escaping von Anführungszeichen und andere Sonderzeichen, und ... vielleicht ... die Kodierung der SQL-string.
Unwahrscheinlich: versuchen
Obwohl ich voraussehen können, ein weiteres problem: die definition von utf8_encode erwartet eine ISO-8859-1-Zeichenfolge, machbar für Französisch, aber nicht für Arabisch. Wenn dies funktioniert, ist die Kodierung der PHP-ist irgendwie falsch.
(Ich finde Java konsequenter w.r.t. Unicode, also ich bin nicht ganz sicher, für PHP.)
Das Problem von wissen, der Codierung und konvertieren, wenn nötig, behandelt werden können mit so etwas wie diese, die dafür sorgt, dass die Codierung CP1252. Umkehren dies, um sicherzustellen, es ist UTF8.