Im "PHP Cookbook" heißt es (S.589), dass zum korrekten Setzen der Zeichencodierung ausgehender Daten auf utf-8 die Konfiguration von default_encoding
in utf-8 geändert werden muss.
Ich kann diese Konfiguration jedoch nicht in php.ini
finden. Soll ich einfach eine Zeile hinzufügen, die default_encoding = "utf-8"
sagt?
Ich habe einen ;default_charset = "iso-8859-1"
. Wie Sie sehen (;
), ist es momentan nicht aktiviert. Soll ich das Semikolon entfernen und auf "utf-8"
setzen? Kümmert sich das um die Standardcodierung?
Ich habe auch andere Kodierungsanweisungen gefunden, von denen ich nicht weiß, was ich tun soll:
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
...
; http://php.net/exif.encode-unicode
;exif.encode_unicode = ISO-8859-15
...
;mssql.charset = "ISO-8859-1"
...
;exif.encode_unicode = ISO-8859-15
Gibt es einen Grund, warum ich sie nicht einfach durch utf-8
ersetzen sollte?
Sie sollten Ihren default_charset
auf UTF-8 setzen:
default_charset = "utf-8"
(Das PHP-Kochbuch enthält möglicherweise einen Tippfehler, wenn Sie aufgefordert werden, den default_encoding
zu ändern. Ich habe noch nie davon gehört.)
Sie sollten auch sicherstellen, dass Ihr Webserver für die Ausgabe von UTF-8 konfiguriert ist, wenn Sie UTF-8-codierte Zeichen ausgeben möchten. In Apache kann dies in der Datei httpd.conf eingestellt werden:
AddDefaultCharset UTF-8
Wenn Sie die Kodierungseinstellungen iconv
, exif
und mssql
ändern möchten, müssen Sie diese wahrscheinlich nicht festlegen (Ihre Einstellungen haben diese trotzdem auskommentiert), es ist jedoch eine gute Idee, sie trotzdem in UTF-8 zu ändern.
Ändern Sie die Zeile
;default_charset = "iso-8859-1"
lesen
default_charset = "utf-8"
Berühren Sie die anderen Optionen nicht. Vermeiden Sie Standardeinstellungen, legen Sie die Kodierung bei allem, was Sie tun, explizit fest
Beachten Sie auch die Kodierung, in der Ihre PHP -Dateien gespeichert werden. Stellen Sie sicher, dass sie in UTF-8 gespeichert sind, insbesondere wenn sie Zeichenfolgen enthalten, die angezeigt oder verglichen werden sollen.
Ich hatte bei meiner mysql-Abfrage ein Problem, dass keine lateinische Akzentuierung erkannt würde, sodass die Abfrage fehlschlagen würde. Ich dachte, es könnte die PHP-Datei sein und so weiter, bis ich herausfand, dass ich mit pdo den Mysql aufrufen musste, um den Zeichensatz hinzuzufügen. Das seltsame ist, dass der vorherige Server, den ich verwendete, gut funktioniert hat!
$dsn = 'mysql:Host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
Auf htaccess-Ebene (.htaccess-Datei) sollte die PHP-Direktive php_value default_charset UTF-8
sein.
Um das Problem zu lösen, habe ich "UTF-8" in "UTF-8" (ohne Bindestrich) geändert und das Problem stattdessen gelöst.
CentOS
Izaias Moura