[Apache/PHP] PB encodage

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

[Apache/PHP] PB encodage

Message par cedric »

Bonjour,

Je pense avoir un pb d'encodage dans une appli PHP sur mon serveur Web.

J'aimerais mettre un "AddDefaultCharset ISO5589-15" quelquepart dans la conf Apache, mais je sais pas où (je suis habitué à la conf ubuntu et là, ça passe pas).

Merci pour le coup de main.

++
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17237
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Apache/PHP] PB encodage (nouveau)

Message par benjarobin »

C'est une très mauvaise idée de resoudre un problème d'encodage par la conf de Apache, qui rajoute dans l'header une ligne. Surtout que si la page en elle même dit le contraire.
Il faut respecter un minimum les normes du W3C dans les pages web, il faut ajouter entre les balise head:

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
Sinon si tu veux vraiment modifier la configuration de apache, il n'y pas de différence avec Ubuntu... C'est juste la location qui est un peu différente.
/etc/httpd/conf/httpd.conf
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

Re: [Apache/PHP] PB encodage (nouveau)

Message par cedric »

Salut benjarobin !

La balise head, c'est déjà fait ;)

C'est le code PHP qui envoi un coup de l'utf-8, un coup du iso-8859-15.

Et arf, c'est pas mieux avec la conf dans le fichier que tu indiques.

Doit bien y avoir une diff de conf entre mon apache/php ubuntu et mon apache/php archlinux car l'appli s'affiche bien sous ubuntu et pas bien sous archlinux.

Y a pas une commande magique qui me permettrait de faire un diff de conf entre les deux ?

++
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17237
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Apache/PHP] PB encodage (nouveau)

Message par benjarobin »

Comprend pas, je répète on ne devrai surtout pas toucher a la conf de apache.... A pars pour des cas très spécial. Donc pastebin le code source de ta page web ou ouvre ton site a l'extérieur, envoie un MP avec l'IP, ou rejoint moi sur IRC.

Sinon suffit de rajouter cette ligne

Code : Tout sélectionner

AddDefaultCharset ISO-8859-15
entre

Code : Tout sélectionner

<Directory "/location_de_ton_site_web">
et

Code : Tout sélectionner

</Directory>
Et tu sur de ne pas avoir éditer tes fichiers ? Et accidentellement modifié l'encodage du fichier.
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

Re: [Apache/PHP] PB encodage (nouveau)

Message par cedric »

Arg, je n'y arrive pas.

Je n'ai pas édité les fichiers PHP (au pire, j'ai cvs qui tourne dessus, j'aurais vu les diff).

Après avoir lu ça, je me demande si ça viendrait pas de MySQL :
http://archlinux.fr/news/php-5-3-dans-extra

++
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

Re: [Apache/PHP] PB encodage (nouveau)

Message par cedric »

Je pense que je tiens une bonne piste...

Voici les réglages MySQL sous Archlinux :

Code : Tout sélectionner

SHOW VARIABLES LIKE '%character%'

character_set_client 	utf8
character_set_connection 	utf8
character_set_database 	utf8
character_set_filesystem 	binary
character_set_results 	utf8
character_set_server 	utf8
character_set_system 	utf8
character_sets_dir 	/usr/share/mysql/charsets/

Voici les réglages MySQL sous Ubuntu :

Code : Tout sélectionner

SHOW VARIABLES LIKE '%character%'

character_set_client 	utf8
character_set_connection 	utf8
character_set_database 	latin1
character_set_filesystem 	binary
character_set_results 	utf8
character_set_server 	latin1
character_set_system 	utf8
character_sets_dir 	/usr/share/mysql/charsets/
Je tente une modification de ces variables et je reviens ici.

++
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

Re: [Apache/PHP] PB encodage (nouveau)

Message par cedric »

J'ai pu faire les modifications grâce à ces commandes MySQL :

Code : Tout sélectionner

SET character_set_server = latin1;
SET character_set_database = latin1;
Mais au reboot de MySQL, tout disparait :(
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17237
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Apache/PHP] PB encodage (nouveau)

Message par benjarobin »

Et tu sur que cela peut venir de mysql... Tu es sur que tu veux pas venir sur IRC ?
Que donne une page statique généré en PHP sans utilisé la BD mais avec des accents.

Si tu pense que cela vient de mysql, il y a un fichier de conf /etc/mysql/my.conf Sinon lorsque le PHP ouvre la connexion a la BD tu peux spécifier l'encodage par défaut.
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
vgib
Hankyu
Messages : 49
Inscription : mar. 29 janv. 2008, 19:52

Re: [Apache/PHP] PB encodage (nouveau)

Message par vgib »

Moi je peux confirmer pour avoir déjà eu ce problème, cela peut provenir de mysql

Regarde du coté de http://www.php.net/manual/fr/function.m ... harset.php, sinon il me semble qu'il faut modifier l'option character_set_client et character_set_server du coté de mysql.conf

Tu trouveras plus d'information sur le character set des requêtes mysql sur un serveur ici: http://www.php.net/manual/fr/function.m ... harset.php

Enfin pour éviter les soucis, je te conseille de faire du full UTF8

@Benjarobin: si tu ne modifie pas les headers dans le fichier de apache, tu fais comment pour une application configuré en UTF8 dans php.ini pour avoir le Content-encoding: UTF-8 dans tes headers?

Append / prépend de apache?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17237
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Apache/PHP] PB encodage (nouveau)

Message par benjarobin »

Bon je retire tout ce que j'ai dis... En effet apache si on envoie pas manuellement sous archlinux l'header de l'encoding
Content-Type: text/html; charset=ISO-8859-1
il rajoute par lui même ceci si on a l'option non vide de default_charset dans php.ini
Content-Type: text/html; charset=utf-8
Ce qui n'est pas terrible...

Bon résumer de mes expériences.

Code : Tout sélectionner

Header request	Dans balise head	Encodage de la page web	 Ouput	Comment
UTF-8           UTF-8                   UTF-8                    é      --
UTF-8           ISO-8859-1              UTF-8                    é	Firefox igore balise head
UTF-8           UTF-8                   ISO-8859-1               ?	--
UTF-8           ISO-8859-1              ISO-8859-1               ?	Firefox igore balise head
ISO-8859-1      UTF-8                   UTF-8                    é	Firefox igore balise head
ISO-8859-1      ISO-8859-1              UTF-8                    é	--
ISO-8859-1      UTF-8                   ISO-8859-1               é	Firefox igore balise head
ISO-8859-1      ISO-8859-1              ISO-8859-1               é	
Donc en gros si dans le header de la requête on spécifie le charset Firefox va le privilégier.

Si tu as default_charset différent de vide dans php.ini ou dans le code php, cherche pas plus loin c'est la ou est le problème. Cela aiderai beaucoup que l'on est accès même temporairement au serveur.
Sinon installe cette extension de firefox : LiveHTTPHeaders et donne une copie d'un header de retour...

Sinon un autre test pour exclure les problème de database, creer ce fichier test.php copie bien dans le bon encodage, je crois que tu es sous KDE, donc ouvre Kwrite, Outil -> encodage -> europe...

Code : Tout sélectionner

<?php

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>test 3</title>
</head>
<body>
	<div>
		J\'ai été à la maison.
	</div>
</body>
</html>';

?>
Et donne nous le résultat de l'header avec l'extension firefox et si la page s'affiche bien...

@vgib Comme tu peux le voir si on configure bien php.ini (c'est les valeurs par défauts) Donc par défaut le charset est vide (c'est au navigateur web de deviner), tu ne devrai pas avoir besoin de spécifier quoi que ce soit dans les headers. Donne moi un seul exemple ou tu le devrai. L'encodage c'est la page web qui doit le fournir... Bien sur il faut respecter un minimum les règles du W3C...

Résumer dans les headers si vous voulez pouvoir gérer facilement différent charset On ne doit pas avoir "charset=UTF-8" dans le Content-encoding... IE le supporte très bien... (une chose qu'il supporte)
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
vgib
Hankyu
Messages : 49
Inscription : mar. 29 janv. 2008, 19:52

Re: [Apache/PHP] PB encodage (nouveau)

Message par vgib »

Effectivement tu as raison le plus simple est de définir le default_charset dans le php.ini, et s'y tenir.

Le charset doit être indiqué via les directives: iconv.input_encoding ,iconv.internal_encoding ,iconv.output_encoding

Le problème ici, c'est qu'il y a l'encoding de retour de la base de donnée, qui semble différent de celui du php.

Il faudrait regarder si l'encoding des fonctions mysql est celui du php par défaut, ou celui du serveur, pour cela un simple mysql_client_encoding ( http://fr.php.net/manual/fr/function.my ... coding.php ) faira l'affaire.

La doc semble muette sur ce point.

Moi je sais que je configure php et mysql en UTF8, mais bon cela ne résoud pas le problème.

VGib
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

Re: [Apache/PHP] PB encodage (nouveau)

Message par cedric »

Sinon, dans mon cas, MySQL étant en UTF-8 sous Archlinux et mon code étant prévu pour tourner sur une base de données Ubuntu (qui sont eux en latin1, pas bien...), je fais ça après un mysql_connect :

Code : Tout sélectionner

mysql_set_charset('latin1',$link);
++
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [Apache/PHP] PB encodage

Message par Feng »

Tu peux modifier les valeurs d'encodage :

Code : Tout sélectionner

ALTER DATABASE `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
Pourquoi vous voulez tous mettre des charsets ISO ? l'ISO c'est has been, le seul charset efficace pour jamais avoir de problème quelle que soit la langue c'est utf8.

Cette solution t'oblige à altérer ta base de donnée, mais sinon la seule solution c'est celle de Cédric :
cedric a écrit :[...] je fais ça après un mysql_connect :

Code : Tout sélectionner

mysql_set_charset('latin1',$link);
++
Avatar de l’utilisateur
cedric
Daikyu
Messages : 71
Inscription : mer. 09 sept. 2009, 18:10

Re: [Apache/PHP] PB encodage

Message par cedric »

C'est à dire que parfois on a pas trop le choix quand on récupère des applis codés en ISO ;)
Mais lors des refontes, c'est de l'UTF8 sinon rien !!

++
Macbook Pro 13 pouces (modèle 5,5 de juin 2009) - sous ArchLinux depuis l'install 2009.08
Puisque vous m'avez aidé, j'ai fait une page dédiée dans le wiki ! Merci.
Répondre