Rechercher : dans
Par :

APACHE PHP UTF8.0

Dernière réponse le 12 jan 2009 à 11:18:43 niouk56, le 10 jan 2009 à 14:41:03 
 Signaler ce message aux modérateurs

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 !
Configuration: Windows Vista
Firefox 3.0.5

Meilleures réponses pour « APACHE PHP UTF8.0 » dans :
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Linux - Gentoo - Installation de Apache2/PHP VoirComme toutes les installations au niveau de Gentoo, Portage se chargera de l'installation des packages et la gestion dépendances. Installation d'Apache2 L'installation d'Apache2 démarrera avec l'exécution de la commande emerge apache Pour...
Installation d'un serveur Web sous Linux (Apache, PHP et MySQL) VoirIntroduction Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type...
PHP - Les variables VoirConcept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...
Installation de EasyPHP VoirIntroduction à EasyPHP Afin de faire fonctionner PHP, il est nécessaire à la base d'en télécharger les sources depuis un site spécialisé (par exemple PHP.net), puis de compiler celui-ci (ainsi que d'éditer les liens) afin de créer un fichier...

1

pitxu, le 10 jan 2009 à 15:59:54

Bonjour,

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

extension=php_iconv.so
extension=php_mbstring.so

Répondre à pitxu

2

niouk56, le 10 jan 2009 à 17:36:38

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 << http://fr2.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 ???

Répondre à niouk56

3

 niouk56, le 12 jan 2009 à 11:18:43
  • +2

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"

Répondre à niouk56
Collection CommentÇaMarche.net