Bonjour,
Voici mon problème concernant l'Utf8:
Pour des raisons pratiques (traduction) et d'homogénéité , j'ai souhaité basculer l'ensemble des mes environnements Web avec un encodage UTF8.
Jusque la pas de souci, Apache 2.2.8, Php 5.2.6, Mysql 5.1 et les fichiers (php,html,js...) ont été de manière globale passé enUTF8 .
Concernant Apache et PHP, qui par défaut dialogue en "ISO-8859-1", je l'ai force a dialoguer en UTF8 par le biais:
pour Apache:
- Modification du httpd.conf en paramétrant un
"AddDefaultCharset UTF-8"
dans chaque environnement "virtualhost"
- Conversion des fichiers php, config,html,js...en UTF-8
- Ajout de l'entête HTML "
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
" (logiquement pas nécessaire puisque forcé au niveau de la config Apache mais ça mange pas de pain donc je l'applique)
Pour PHP:
- forcer dans la config php.ini
; PHP's built-in default is text/html
default_mimetype = "text/html"
default_charset = "UTF-8"
[mbstring]
; language for internal character representation.
mbstring.language = UTF-8
; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
mbstring.internal_encoding = UTF-8
; http input encoding.
mbstring.http_input = UTF-8
; http output encoding. mb_output_handler must be
; registered as output buffer to function
mbstring.http_output = UTF-8
; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
;mbstring.encoding_translation = Off
; automatic encoding detection order.
; auto means
mbstring.detect_order = auto
; substitute_character used when character cannot be converted
; one from another
;mbstring.substitute_character = none;
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
mbstring.func_overload = 7
Concernant Mysql, par défaut la config est passé en UTF8, et les Table en UTF8 (ici pas de problématique !)
Donc le résultat de tout ça semble correct , aucun problème majeur d'encodage ENFIN presque !
Car lorsque j'utilise de L'url Rewriting, je veut naturellement faire sauter les accentuations...donc pour cela j'utilise la fonction "strtr" de php... mais cela ne fonctionne pas ...
Voici donc le test que je fait avec la portion de code ci-dessous:
<?php
function NameFile($name)
{
echo $name;
// enlever les accents
$name = strtr($name,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
echo '<br />'.$name;
// remplacer les caracteres autres que lettres, chiffres et point par _
$name = preg_replace('/([^.a-z0-9]+)/i', '_', $name);
return $name;
}
NameFile('ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ');
?>
et je le met en ligne (test.php)
Quand ce fichier est enregistré en ANSI (donc pas logique selon mes souhaits) le résultat est le suivant :
����������������������������������������������������
AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy
Donc ici , Apache affiche mal le format ...ce qui semble normal car le fichier n'a pas le bon encodage... Par contre le traitement PHP ce fait correctement !
Maintenant si j'inverse l'encodage du fichier "test.php" en UTF-8 voici le résultat est le suivant:
ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ
yAyAyAyEyEyIyIyOyOyOyUyUyayayaycyeyeyiyiyoyoyoyuyuyyy�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�y�
Donc ici c'est l'inverse, Apache traite correctement les accentuations puisque le fichier est en UTF8, mais par contre maintenant Php ne traite plus correctement et du coup cela renvoit un résultat faussé....
J'ai donc manifestement un problème au niveau du dialogue entre APACHE et PHP, mais après avoir testé un grand nombre de paramétrage différent, et des lectures de différents forums...Je bloque totalement.....
Donc si quelqu'un a déjà rencontré ce problème et peut me permettre d'avancé, je le REMERCIE d'avance !
Configuration: Windows Vista
Firefox 3.0.5