Aller au menu - Aller au contenu

Php et utf-8

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne simonbibeau # Posté le 12/02/2012 à 15:57:32

Bonjour,
j'aurais une question concernant l'utf-8:

- Je voudrais savoir, si j'ai mis un AddDefaultCharset utf-8 dans un fichier .htaccess à la racine, suis-je tout de même obliger de mettre un header( 'content-type: text/html; charset=utf-8' ) au début de chacun de mes fichier .php?

Et aussi, j'ai changer le charset de ma base de donnée pour utf8_unicode_ci. À chaque connexion à la base de donnée, j'ai rajouter la ligne mysql_set_charset( 'utf8' ). Je mets cette balise meta <meta http-equiv="content-type" content="text/html; charset=utf-8" /> à chacun de mes fichers html et aussi j'encode chacun de mes fichiers à l'UTF-8 sans BOM.

Est-ce qu'il y aurait d'autre chose à faire pour que mon site soit 100% UTF-8?

Merci beaucoup
Publicité # Posté le 12/02/2012 à 15:57:32

Hors ligne julp # Posté le 12/02/2012 à 16:04:13
♪ ♫

Citation : simonbibeau
- Je voudrais savoir, si j'ai mis un AddDefaultCharset utf-8 dans un fichier .htaccess à la racine, suis-je tout de même obliger de mettre un header( 'content-type: text/html; charset=utf-8' ) au début de chacun de mes fichier .php?

Impossible de répondre sans la configuration de PHP notamment. En effet, il faut savoir que AddDefaultCharset n'est pas nécessairement utilisé si quelqu'un (PHP) définit un jeu avant (ce qui est gênant s'il est faux). Dans l'ordre de priorité décroissante (le premier qui correspond est appliqué), voilà ce qui compte :
1) Le dernier appel de fonction header définissant l'entête Content-type est considéré (toute précédente définition étant écrasée) ;
2) Si et seulement si, la partie charset de cet entête ou tout cet entête est absent, alors PHP les ajoutera en se basant sur ses directives default_charset et default_mimetype ;
3) Si et seulement si, il existe un entête Content-type ayant une valeur text/plain ou text/html où la partie charset est absente, alors Apache considérera sa directive AddDefaultCharset pour l'y ajouter.
=> Personnellement, je conseille l'utilisation de header pour éviter toute mauvaise surprise (à la rigueur en dédié, c'est discutable).

Pour le reste, sur le papier disons que oui. En réalité c'est plus complexe :
* il ne faut pas utiliser les fonctions PHP incompatibles avec UTF-8 (une grande majorité des fonctions standard - strtr, str(_)i*, substr, strtolower, etc)
* pour les données de provenance extérieures, qu'elles soient également en UTF-8 ou ré-encodée en UTF-8 (ce qui n'est pas forcément évident quand on n'a pas la main dessus - données émises par le client)
* les extensions avec un encodage spécifique (*XML* = UTF-8 ; Zip = CP850)
* le jeu du système de fichiers (Windows = CP1252)
Édité le 12/02/2012 à 16:26:49 par julp

- PHP : PDO, UTF-8, ZipArchive, cURL, cookies/sessions
- Posez vos questions techniques sur le forum, pas en privé (je n'y répondrai pas)
- Je ne fais pas d'effort sur les forums pour ceux qui n'en font pas (codes tartine, "ça marche pas", jeu des 1001 erreurs, j'ai la flemme de lire la doc, etc)
- Pas de "démarchage" par MP : osef de votre site/projet/sondage/thèse (ça part direct à la poubelle avec un ignore en prime)
 
Hors ligne simonbibeau # Posté le 12/02/2012 à 16:38:58

Ah oki, merci.
C'est que je suivais ce tutoriel : http://j-willette.developpez.com/tutor [...] site-en-utf8/

Finalement, l'utilisation de l'UTF-8 à l'air plus complexe qu'il n'y parait. Au début, je voulais utiliser l'iso-8859-1, mais voulant utiliser aussi l'Ajax, j'ai su que je devrais utiliser l'UTF.

Selon vous, qu'est-ce qui serait le moins difficile, encoder l'UTF pour l'Ajax avec php, ou baser mon site au complet sur l'UTF?

Edit: Je viens de trouver un bon tuto sur le site du zero pour passer du latin1 à l'unicode. Mais il me reste deux questions en tête.
J'ai trouver une directive que l'on peut modifier dans le .htaccess : php_value mbstring.func_overload 7 qui permet de surcharger les fonctions de bases pour qu'elle prenne en charge les multi-bits. Mais, avec phpinfo(), la valeur de mbstring.func_overload ne change pas, il reste à 0. Quelqu'un aurait une idée du pourquoi?

Et aussi, les problème entre le latin1 et l'unicode touche-t-il juste les sorties de données comme les echo, ou touche plus que ça?
Édité le 13/02/2012 à 00:10:42 par simonbibeau

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx