Définition de L'encodage par défaut PHP en utf-8?

Dans le "PHP Cookbook", ils disent (p. 589) que pour définir correctement le codage de caractères des données sortantes en utf-8, Il est nécessaire d'éditer la configuration default_encoding en utf-8.

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 (;), pour le moment, il n'est pas activé. Dois-je supprimer le point-virgule et le définir sur "utf-8"? Est - ce que cela prend en charge l'encodage par défaut?

J'ai aussi trouvé autres directives d'encodage 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
demandé sur YakovL 2012-02-19 22:02:36

6 réponses

Vous devriez définir votre default_charset sur UTF-8:

default_charset = "utf-8"

(PHP Cookbook peut avoir une faute de frappe s'ils vous demandent de changer le default_encoding - Je n'en ai jamais entendu parler.)

Vous devez également vous assurer que votre serveur web est défini sur output UTF-8 Si vous voulez sortir des caractères codés UTF-8. Dans Apache, cela peut être défini par dans le httpd.fichier conf:

AddDefaultCharset UTF-8

Comme pour modifier le iconv, exif, et mssql paramètres d'encodage, vous n'avez probablement pas besoin de les définir (vos paramètres ont ceux-ci ont commenté de toute façon) mais c'est une bonne idée de les changer tous en UTF-8 de toute façon.

40
répondu Ben D 2016-03-03 10:56:55

Modifier la ligne

;default_charset = "iso-8859-1"

Lire

default_charset = "utf-8"

A propos des autres options, ne les touchez pas. Évitez les paramètres par défaut, définissez toujours explicitement l'encodage de dans tout ce que vous faites

  • connexions à la base de données,
  • lecture et écriture de fichiers,
  • conversion avec iconv.

Aussi, méfiez-vous de l'encodage dans lequel vos fichiers PHP sont enregistrés, assurez-vous qu'ils sont en UTF-8, surtout s'ils contiennent des chaînes à afficher ou à comparer.

6
répondu gioele 2012-11-06 15:43:33

J'ai eu un problème sur ma requête mysql qu'il ne reconnaîtrait pas une acentuation latine, donc la requête échouerait. Je pensais que ce pourrait être le fichier php et ainsi de suite, jusqu'à ce que j'ai découvert qu'en utilisant pdo pour appeler le mysql, je devais ajouter le jeu de caractères. La chose étrange est que le serveur précédent, j'ai utilisé a bien fonctionné!

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
3
répondu Miguel 2017-09-05 09:28:13

Pour résoudre, j'ai changé "UTF-8" en "UTF-8" (sans le tiret), résolvant le problème à la place.

CentOS

Izaias Moura

0
répondu user7232321 2016-11-30 17:44:33

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

0
répondu ontananza 2017-11-11 20:45:08

Changer à partir de *default_charset = "utf-8"* à *default_charset = "iso-8859-1"* fonctionne pour moi ( j'utilise le serveur web Apache et Linux OS). pour certaines raisons, lorsque j'utilise utf-8, certains caractères ne rendent pas bien. Ils changent soit à un signe carré ou un point d'interrogation en fonction du navigateur web utilisé.

-2
répondu Will 2013-09-15 19:50:21