1355 Stimmen

UTF-8 durchgängig

Ich bin dabei, einen neuen Server einzurichten und möchte UTF-8 in meiner Webanwendung vollständig unterstützen. Ich habe dies in der Vergangenheit auf bestehenden Servern ausprobiert und muss am Ende immer auf ISO-8859-1 zurückgreifen.

Wo genau muss ich die Kodierung/Chartersets einstellen? Ich bin mir bewusst, dass ich Apache, MySQL und PHP konfigurieren muss, um dies zu tun - gibt es eine Standard-Checkliste, die ich befolgen kann, oder vielleicht eine Fehlerdiagnose, wo die Unstimmigkeiten auftreten?

Dies ist für einen neuen Linux-Server, auf dem MySQL 5, PHP 5 und Apache 2 laufen.

22 Stimmen

Hier ist eine Einführung in Kodierungen im Allgemeinen und Kodierungen in PHP im Besonderen: Was jeder Programmierer unbedingt über Kodierungen und Zeichensätze für die Arbeit mit Text wissen muss

0 Stimmen

Einige aktuelle Diskussionen über PHP 7 deuten darauf hin, dass es keine Änderungen an der "offiziell aufgegebenen" Position von 2010 gibt... Es gibt etwas mehr über "PHP7 und UTF-8"?

0 Stimmen

Dieses Problem ist weit verbreitet. Aber es gibt keine schnelle Lösung, Sie müssen Folgendes einrichten utf-8 für jeden von ihnen einzeln - MySQL 5, PHP 5 ODER Apache 2.

9voto

jalf Punkte 235501

Die Unicode-Unterstützung in PHP ist immer noch ein großes Chaos. Während es in der Lage ist, eine Konvertierung von ISO 8859 String (den es intern verwendet) in UTF-8 umwandelt, fehlt ihm die Fähigkeit, nativ mit Unicode-Strings zu arbeiten, was bedeutet, dass alle String-Verarbeitungsfunktionen Ihre Strings verstümmeln und beschädigen werden.

Sie müssen also entweder eine separate Bibliothek für die korrekte UTF-8-Unterstützung verwenden oder alle String-Handling-Funktionen selbst neu schreiben.

Der einfache Teil ist die Angabe des Zeichensatzes in HTTP-Headern und in der Datenbank usw., aber nichts davon zählt, wenn Ihr PHP-Code kein gültiges UTF-8 ausgibt. Das ist der schwierige Teil, und PHP gibt Ihnen hier praktisch keine Hilfe. (Ich glaube, PHP 6 soll das Schlimmste beheben, aber das ist noch eine Weile hin).

9voto

Budimir Grom Punkte 760

Wenn Sie wollen, dass ein MySQL-Server den Zeichensatz festlegt und nicht PHP als Client (altes Verhalten; meiner Meinung nach vorzuziehen), fügen Sie skip-character-set-client-handshake zu Ihrem my.cnf unter [mysqld] und Neustart mysql .

Dies kann zu Problemen führen, wenn Sie eine andere Sprache als UTF-8 verwenden.

7voto

commonpike Punkte 9386

Die oberste Antwort ist ausgezeichnet. Hier ist, was ich hatte auf eine regelmäßige Debian PHP, und MySQL Einrichtung:

// Storage
// Debian. Apparently already UTF-8

// Retrieval
// The MySQL database was stored in UTF-8,
// but apparently PHP was requesting ISO 8859-1. This worked:
// ***notice "utf8", without dash, this is a MySQL encoding***
mysql_set_charset('utf8');

// Delivery
// File *php.ini* did not have a default charset,
// (it was commented out, shared host) and
// no HTTP encoding was specified in the Apache headers.
// This made Apache send out a UTF-8 header
// (and perhaps made PHP actually send out UTF-8)
// ***notice "utf-8", with dash, this is a php encoding***
ini_set('default_charset','utf-8');

// Submission
// This worked in all major browsers once Apache
// was sending out the UTF-8 header. I didn’t add
// the accept-charset attribute.

// Processing
// Changed a few commands in PHP, like substr(),
// to mb_substr()

Das war alles!

2 Stimmen

utf8mb4 ist der Zeichensatz, der für MySQL verwendet werden soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X