web-dev-qa-db-fra.com

Réglage PHP encodage par défaut à utf-8?

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?

28
JDelage

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.

41
Ben D

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.

  • connexions de base de données,
  • lire et écrire des fichiers,
  • convertir avec iconv.

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.

7
gioele

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';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
4
Miguel

Au niveau htaccess (fichier .htaccess), la directive php devrait être php_value default_charset UTF-8

0
ontananza

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

0
user7232321