Dans le "Livre de recettes PHP", ils disent (p. 589) qu'il est nécessaire de modifier la configuration default_encoding
sur utf-8 pour définir correctement l'encodage des données sortantes.
Cependant, je ne trouve pas cette configuration dans php.ini
. Devrais-je simplement ajouter une ligne qui dirait default_encoding = "utf-8"
?
J'ai un ;default_charset = "iso-8859-1"
. Comme vous pouvez le voir (;
), il n’est pas activé pour le moment. Dois-je enlever le point-virgule et le régler sur "utf-8"
? Est-ce que cela prend en charge le codage par défaut?
J'ai aussi trouvé d'autres directives de codage dont je ne sais pas quoi faire:
[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
Y a-t-il une raison pour laquelle je ne devrais pas simplement les remplacer tous par utf-8
?
Vous devez définir votre default_charset
sur UTF-8:
default_charset = "utf-8"
(PHP Cookbook peut contenir une faute de frappe s'il vous demande de changer le default_encoding
- je n'en ai jamais entendu parler.)
Vous voudrez également vous assurer que votre serveur Web est défini sur la sortie UTF-8 si vous souhaitez générer des caractères codés UTF-8. Dans Apache, cela peut être défini dans le fichier httpd.conf:
AddDefaultCharset UTF-8
En ce qui concerne la modification des paramètres d'encodage iconv
, exif
et mssql
, vous n'avez probablement pas besoin de les définir (vos paramètres sont commentés de toute façon), mais il est judicieux de les modifier tous de toute façon en UTF-8.
Modifier la ligne
;default_charset = "iso-8859-1"
lire
default_charset = "utf-8"
À propos des autres options, ne les touchez pas. Évitez les paramètres par défaut, définissez toujours explicitement le codage dans tout ce que vous faites.
Aussi, méfiez-vous du codage dans lequel vos fichiers PHP sont enregistrés, assurez-vous qu'ils sont au format UTF-8, surtout s'ils contiennent des chaînes à afficher ou à comparer.
J'ai eu un problème sur ma requête mysql qui ne reconnaissait pas l'acentuation latine, donc la requête échouait. Je pensais que cela pourrait être le fichier php et ainsi de suite, jusqu'à ce que je découvre que l'utilisation de pdo pour appeler le mysql, je devais ajouter le charset. La chose étrange est que le serveur précédent que j'ai utilisé a bien fonctionné!
$dsn = 'mysql:Host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
Au niveau htaccess (fichier .htaccess), la directive php devrait être php_value default_charset UTF-8
Pour résoudre le problème, j'ai remplacé "UTF-8" par "UTF-8" (sans tiret), en résolvant le problème.
CentOS
Izaias Moura