[Resolu] UTF 8 - Euros- accents et include.php

Eléphant du PHP | 193 Messages

02 janv. 2008, 17:44

Bonjour et bonne année à toute l'équipe du forum et des forumeurs!

J'ai un souci avec l'UTF-8...

Nous avons à réaliser un site Internet hébergé sur une plateforme qui ne tolérait pas l'ISO. Depuis, nous réalisons nos sites en UTF-8. (Charset en UTF-8 et base de données mySql en utf-8)

J'ai aujourd'hui deux problèmes:

- L'envoi d'accents sur un formulaire mail via les _POST ne fonctionnait pas = les accents se transforment en caractères inconnus, j'ai donc placé la ligne de commande suivante:

Code : Tout sélectionner

$_POST = array_map('utf8_decode', $_POST);
Tout fonctionne pour les informations présaisies et les informations saisies par l'internaute, sauf... pour le signe "€" qui est remplacé par un "?"

- Le second problème est que lorsque je fais un include de php pour des informations écrites en dur (sans passer par la table), toutes les informations accentuées sont non reconnues par le navigateur.

Auriez-vous une idée pour corriger ces problèmes?

Merci par avance pour vos avis éclairés!

@+! :D
Modifié en dernier par Neomcdn le 10 janv. 2008, 16:24, modifié 1 fois.

ViPHP
ViPHP | 1996 Messages

02 janv. 2008, 23:30

Pour tes infos écrites en dur utilise aussi utf8_encode() mais le mieux est d'utiliser les balises HTML avec str_replace

$caracteres = array ("é","è");
$caracteres_HTML = array ("é","è");

$texte = str_replace($caracteres,$caracteres_HTML,$texte);
Les deux tableaux doivent avoir la même longueur.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Mammouth du PHP | 1885 Messages

03 janv. 2008, 00:32

Pour tes infos écrites en dur utilise aussi utf8_encode() mais le mieux est d'utiliser les balises HTML avec str_replace

$caracteres = array ("é","è");
$caracteres_HTML = array ("é","è");

$texte = str_replace($caracteres,$caracteres_HTML,$texte);
Les deux tableaux doivent avoir la même longueur.
Les entitées HTML n'ont aucune signification à l'intérieur d'une base de données, variable PHP ou fichier XML. Elles sont donc à éviter. Autrement ta série d'instructions peut se résumer à l'utilisation de htmlentities().

@Neomcdn

Si tu as accès à mbstring, essaie de détecter l'encodage de la chaine reçue avec cette fonction:
http://www.php.net/manual/fr/function.m ... coding.php

Assure-toi que c'est le bon encodage. Il est possible que ce soit iso-8859-1 qui ne reconnait pas le symbole de l'euro:
L'ISO 8859-15, notamment introduite pour prendre en charge le caractère € de l'euro, gère également mieux le français car...
Encore une fois, si mbstring est utilisé, vérifie cette directive: mbstring.http_input
Assure-toi que c'est le bon encodage.

Je pense qu'il faille indiquer l'encodage attendu par le serveur dans ton formulaire avec l'attribut accept-charset:
http://www.w3.org/TR/html4/interact/for ... pt-charset

Code : Tout sélectionner

<form ... accept-charset="UTF-8">
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 193 Messages

10 janv. 2008, 12:32

Salut et merci pour vos réponses!

Je n'ai pas tout compris...

Comment dois-je encoder l'include? Quelle fonction dois-je utiliser? utf8_encode() s'utilise de quelle manière?

[EDIT]çà y est j'ai trouvé!

J'ai créé le fichier avec dreamweaver et par défaut le fichier est en ANSI. Il faut donc ouvrir le fichier avec bloc notes et l'enregistrer sous en UTF-8.

C'est tout: le tour est joué; plus de pb d'accent avec les include![/EDIT]

Merci!

@+! :)