APACHE PHP UTF8.0

Résolu/Fermé
niouk56 Messages postés 3 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 12 janvier 2009 - 10 janv. 2009 à 14:41
niouk56 Messages postés 3 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 12 janvier 2009 - 12 janv. 2009 à 11:18
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 :

&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;
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&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;y&#65533;


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 !
A voir également:

3 réponses

niouk56 Messages postés 3 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 12 janvier 2009 1
12 janv. 2009 à 11:18
Bon je clôture ce post.

La raison du problème, pour ce que cela intéresse, c'est qu'un certain nombre de fonction PHP sont boguée en UTF-8

Pour le coup, j'ai remplacé la fonction "strtr" par "str_replace"
1
pitxu Messages postés 689 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 25 mars 2015 94
10 janv. 2009 à 15:59
bonjour,

as-tu chargé les bibliothèques dans php.ini ?

extension=php_iconv.so
extension=php_mbstring.so
0
niouk56 Messages postés 3 Date d'inscription samedi 10 janvier 2009 Statut Membre Dernière intervention 12 janvier 2009 1
10 janv. 2009 à 17:36
Merci pour ta réponse,

J'ai oublié de préciser une chose importante, tout tourne sur 2003 server

Cependant, la librairie php_mbstring.dll est bien chargé.

En ce qui concerne iconv, il me semble qu'elle a été incluse direct dans PHP a partir de la version 4.2.1 ??

Note: Note aux utilisateurs Win32 << https://www.php.net/manual/fr/iconv.installation.php

Afin d'activer ce module dans l'environnement Windows®, vous devez copier la bibliothèque iconv.dll ou iconv-1.3.dll (pour les versions antérieures à 4.2.1) qui est fournie avec le paquet PHP/Win32 dans un dossier spécifié par la variable d'environnement PATH ou dans un des dossiers systèmes de votre installation de Windows®. Ce module fait parti de PHP depuis PHP 4, donc les bibliothèques iconv.dll et php_iconv.dll ne sont plus nécessaires.

Ce qui expliquerait que je ne trouve pas cette librairie dans les sources....

Et j'avais d'ailleurs omis de dire tout a l'heure la conf concernant iconv dans le php.ini

[iconv]
iconv.input_encoding = UTF-8
iconv.internal_encoding = UTF-8
iconv.output_encoding = UTF-8



donc je ne voit toujours pas d'ou vient mon souci....je passe forcement a côté de quelque chose...mais quoi ???
0