C'est mon premier message sur la liste alors soyez indulgents même si c'est une question toute simple : je veux faire un site en français et en espéranto. Pour cette dernière langue, j'ai besoin d'utiliser le codage UTF-8. Donc j'ai choisi l'option "codage universel" pour la base de données.
Le problème est que par défaut, Apache a une directive "AddDefaultCharset" qui est généralement définie à ISO-8859-1 (on voit bien que HTTP 1.1, ça commence à dater). Il faut donc définir explicitement que la page est encodée en UTF-8. Pour le faire, il faut utiliser ceci avant le début du code HTML:
<?php
header("Content-type: text/html; charset=utf-8");
?>
Où faut-il indiquer cette ligne en PHP? Ça fonctionne si je l'ajoute dans chaque fichier ".html" mais ça me semble un peu bidouillesque et redondant, y a-t-il une solution plus élégante?
Question liée : est-ce qu'il est envisagé d'améliorer SPIP pour que le bon codage soit envoyé automatiquement, si la base de données est en mode "universel"? Ça serait pratique.
Une idée dont je ne suis pas sur qu'elle marche mais qui me semble logique: le fichier "mes_fonctions.php3" qui a priori doit être chargé avant toutes les pages puisque les fonctions qui y sont doivent pouvoir être utilisées partout...
A tester ou confirmer
--
Pierre
--Le 6/09/03 23:15 +0200, Grégoire Colbert a écrit:
Bonjour,
C'est mon premier message sur la liste alors soyez indulgents même si
c'est une question toute simple : je veux faire un site en français et en
espéranto. Pour cette dernière langue, j'ai besoin d'utiliser le codage
UTF-8. Donc j'ai choisi l'option "codage universel" pour la base de
données.
Le problème est que par défaut, Apache a une directive
"AddDefaultCharset" qui est généralement définie à ISO-8859-1 (on voit
bien que HTTP 1.1, ça commence à dater). Il faut donc définir
explicitement que la page est encodée en UTF-8. Pour le faire, il faut
utiliser ceci avant le début du code HTML: <?php
header("Content-type: text/html; charset=utf-8");
?>
Où faut-il indiquer cette ligne en PHP? Ça fonctionne si je l'ajoute dans
chaque fichier ".html" mais ça me semble un peu bidouillesque et
redondant, y a-t-il une solution plus élégante?
Question liée : est-ce qu'il est envisagé d'améliorer SPIP pour que le
bon codage soit envoyé automatiquement, si la base de données est en mode
"universel"? Ça serait pratique.
C'est mon premier message sur la liste alors soyez indulgents même si
c'est une question toute simple : je veux faire un site en français et
en espéranto. Pour cette dernière langue, j'ai besoin d'utiliser le
codage UTF-8. Donc j'ai choisi l'option "codage universel" pour la base
de données.
Le problème est que par défaut, Apache a une directive
"AddDefaultCharset" qui est généralement définie à ISO-8859-1 (on voit
bien que HTTP 1.1, ça commence à dater). Il faut donc définir
explicitement que la page est encodée en UTF-8. Pour le faire, il faut
utiliser ceci avant le début du code HTML:
<?php
header("Content-type: text/html; charset=utf-8");
?>
normalement ça ça marche, dans tes squelettes :
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
C'est mon premier message sur la liste alors soyez indulgents même si
c'est une question toute simple : je veux faire un site en français et
en espéranto. Pour cette dernière langue, j'ai besoin d'utiliser le
codage UTF-8. Donc j'ai choisi l'option "codage universel" pour la base
de données.
Le problème est que par défaut, Apache a une directive
"AddDefaultCharset" qui est généralement définie à ISO-8859-1 (on voit
bien que HTTP 1.1, ça commence à dater). Il faut donc définir
explicitement que la page est encodée en UTF-8. Pour le faire, il faut
utiliser ceci avant le début du code HTML:
<?php
header("Content-type: text/html; charset=utf-8");
?>
normalement ça ça marche, dans tes squelettes :
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
Très bonne idée, mais qui ne marche pas... Car malgré la ressemblance, cette ligne n'est pas équivalente à la ligne en PHP. La fonction en PHP sert à modifier le type de contenu et l'encodage *avant* la transmission du fichier. Le problème est lié à la norme HTTP 1.1:
Je cite : "HTTP/1.1 recipients MUST respect the charset label provided by the sender; and those user agents that have a provision to "guess" a charset MUST use the charset from the content-type field if they support that charset, rather than the recipient's preference, when initially displaying a document."
Ce que dit la norme HTTP 1.1, c'est que les "récepteurs" doivent respecter les indications de contenu et d'encodage du serveur, même si une fois qu'ils ont reçu le fichier, ils s'aperçoivent que le contenu du fichier indique autre chose. Ici, Apache dit que le fichier est en ISO-8859-1, et la balise <meta> ne doit pas servir à corriger l'erreur d'encodage.
Ça ne signifie pas que cette balise est inutile, mais elle ne sert que si on est sur un serveur qui n'envoie pas systématiquement une valeur d'encodage. À ce moment-là, le navigateur a le droit d'essayer de trouver tout seul l'encodage. Ce qui est "amusant", c'est que Mozilla et Opera respectent bien la norme HTTP 1.1, mais pas Konqueror ou MSIE, qui appliquent systématiquement la valeur de la balise meta, si elle est présente.
Je vais essayer de mettre la ligne dans "mes_fonctions.php3" comme me l'a indiqué Pierre.
Le lun 08/09/2003 à 19:31, Grégoire Colbert a écrit :
>
>>Question liée : est-ce qu'il est envisagé d'améliorer SPIP pour que le
>>bon codage soit envoyé automatiquement, si la base de données est en
>>mode "universel"? Ça serait pratique.
> J'ajoute ça dans le CVS.
Merci pour cet ajout, mais puis-je savoir où tu as ajouté cette ligne?
Vu que ça répond à ma question initiale aussi... :o)
codage de la base de données : "Votre site est en : o HTML o XHTML". Car
pour le XHTML, il faut théoriquement envoyer:
Content-type: application/xhtml+xml; charset=#CHARSET
et non "text/html".
Seul petit problème, il y a actuellement un bogue avec MSIE. Si on lui
envoie du contenu avec le type MIME "application/xhtml+xml", il plante
comme une bouse. Donc pour lui, il faut utiliser quand même "text/html".
Hum, honnêtement tout ça complique l'interface de configuration
pour rien. Le mieux est d'envoyer l'entête depuis tes squelettes
si cela t'importe.