Page 1 sur 2

Problème avec les accents (résolu) mais aussi avec les ' (pa

Posté : 25 sept. 2008, 22:32
par TiFred
Bonjour

Lorsque je clique sur un lien du type http://www.ebasket.fr/inscription.php?r ... .83.94.189

à l'affichage du prénom j'obtiens Frédéric

voici le code de la page inscription
<?php

require_once("sessions.php") ;
require_once("admin/constantes.php") ;
require ("admin/newfonctions.php") ;

$_SESSION['num_s'] = numsaison ; $_GET['reprendreq'] = stripslashes($_GET['reprendreq']) ;
$_GET['nom'] = stripslashes($_GET['nom']) ; $_GET['prenom'] = stripslashes($_GET['prenom']) ;
$_GET['pseudo'] = stripslashes($_GET['pseudo']) ; $_GET['equipe'] = stripslashes($_GET['equipe']) ;
$_GET['motiv'] = stripslashes($_GET['motiv']) ;

$text = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'><html xmlns='http://www.w3.org/1999/xhtml' xml:lang='fr' ><head><title>EBASKET Inscription</title><link href='http://www.ebasket.fr/styles/defaut.css' type='text/css' rel='stylesheet' /><meta name='Author' content='Frédéric COULAUD' /><meta name='Identifier-URL' content='http://www.ebasket.fr' /><meta http-equiv='content-Type' content='text/html; charset=iso-8859-1' /></head><body><div class='centr2'><img src='http://www.ebasket.fr/images/ebasket.gif' alt='Bannière%20Ebasket' /></div>" ;
$text .= "<h2>Bulletin d'inscription de ".$_GET['pseudo']." </h2><form method='post' action='http://www.ebasket.fr/validinscrit2.php?reprendreq=".AjoutSlash(str_replace(' ','%20',$_GET['reprendreq']))."&numsaison=".$_SESSION['num_s']."&'><div>" ;
$text .= "Nom : <input type='text' name='nom' size='30' value='".$_GET['nom']."' maxlength='30' /><br />" ;
$text .= "Prénom : <input type='text' name='prenom' size='30' value='".$_GET['prenom']."' maxlength='30' /><br />" ;
$text .= "Pseudo : <input type='text' name='pseudo' size='8' value='".$_GET['pseudo']."' maxlength='8' /><br />" ;
$text .= "Mot de passe : <input type='password' name='password' size='8' value='".$_GET['password']."' maxlength='8' /><br />" ;
$text .= "Equipe : <input type='text' name='equipe' size='30' value='".$_GET['equipe']."' maxlength='30' /><br />" ;
$text .= "Pays : <input type='text' name='pays' size='30' value='".$_GET['pays']."' maxlength='30' /><br />" ;
$text .= "Etat de la salle : <input type='text' name='etat' size='10' value='".$_GET['etat']."' maxlength='10' /><br />" ;
$text .= "E-mail : <input type='text' name='mail' size='50' value='".$_GET['mail']."' maxlength='50' /><br />" ;
$text .= "Motivation : <textarea name='motiv' rows='5' cols='50'>".$_GET['motiv']."</textarea><br />" ;
$text .= "IP : <input type='text' name='ip' size='50' value='".getenv("REMOTE_ADDR")."' maxlength='50' /><br />" ;
$text .= "</div><div class='centr2'><input class='bouton' type='submit' value='Enregistrer' name='enregistrer' /></div></form></body></html>" ; 

echo "$text" ;
?> 

Quel peut me dire pourquoi ?
Merci

Posté : 25 sept. 2008, 22:36
par Aureusms
Le codage de ta page mon ami...

essaye cela pour voir :
$_GET['nom'] = stripslashes($_GET['nom']) ; $_GET['prenom'] = stripslashes($_GET['prenom']) ;
echo utf8_encode($_GET['nom']);
Sinon vérifie dans la partie HTML entre les balises <HEAD> et </HEAD> si tu as
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Posté : 25 sept. 2008, 22:37
par sadeq
C'est un problème d'encodage UTF-8. Essaye ça:
echo utf8_encode($text) ; 

Posté : 25 sept. 2008, 22:43
par TiFred
C'est pire voilà ce que cela affiche : Frédéric

Posté : 26 sept. 2008, 05:28
par Cyrano
Au lieu de ré-encoder en UTF-8 un contenu qui est déjà en UTF-8, modifie l'encodage dans l'en-tête HTML. Ta balise meta indique iso-8859-1. Fais l'expérience suivante : ouvre ta page dans un navigateur et ensuite, clique sur "Affichage>Encodage des caractères>UTF-8" : et là, miracle, tout redevient normal.
Donc, remplace ceci :

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
par ça

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Posté : 02 oct. 2008, 21:46
par TiFred
Bonjour,

ça me met bien Frédéric mais devant ça m'affiche Pr�nom
une idée ?
merci

Posté : 02 oct. 2008, 22:16
par Cyrano
Ça veut donc dire que tu as des données en UTF-8 pour partie et en iso-8859-1 pour l'autre partie. Si ce qui est en utf-8 provient de la base de données, alors utilise la fonction utf8_decode() sur les données et utilise le charset iso-8859-1 pour ton en-tête HTML :-k

Posté : 02 oct. 2008, 22:32
par TiFred
Je vais essayer mais c'est bizarre

Les données sont passées par un POST, puis un lien dans un message envoyé afin d'afficher un autre POST
Je ne vois pas pourquoi cela serait coder (peut-être le message) :?:

Posté : 02 oct. 2008, 22:45
par AB
Si c'est possible le mieux serait que tu utilises le même charset à tous les niveaux (bdd php et html)

Si tu utilises utf-8, bien penser à mettre

Code : Tout sélectionner

header('Content-type: text/html; charset=UTF-8');
au début de ton code php ainsi que

Code : Tout sélectionner

mysql_query("SET NAMES 'utf8'");

juste après ta connexion à la bdd, car pour l'instant (en attendant php6) le serveur et mysql envoient par défaut des entêtes au format iso-8859-1 et elles priment sur la balise meta html.

Si tu veux un petit exemple de code complet codé entièrement en utf-8 tu peux aller visiter ce tuto

Posté : 02 oct. 2008, 22:48
par TiFred
Un mail est codé comment ???

Posté : 02 oct. 2008, 22:58
par AB
Je vois pas bien le rapport mais tu peux spécifier l'entête que tu veux dans les headers

exemple
$headers .= "Content-type: text/plain; charset=UTF-8\n\n"
Sinon tu as lu mon message précédent ?

Posté : 02 oct. 2008, 22:58
par Berzemus
En base64, il me semble.

Posté : 02 oct. 2008, 23:13
par TiFred
Je vois pas bien le rapport mais tu peux spécifier l'entête que tu veux dans les headers

exemple
$headers .= "Content-type: text/plain; charset=UTF-8\n\n"
Sinon tu as lu mon message précédent ?
$entete2 = 'MIME-Version: 1.0' . "\r\n" ;
$entete2 .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$entete2 .= "From: [i]moi[/i]\n" ;
$entete2 .= "Reply-to: [i]moi[/i]" ;
if (substr(mysqli_get_host_info($db),0,9)<>'localhost') EnvoieMail_Html('toto' , '[Ebasket] Inscription de '.$_POST['pseudo'], $message2, 'moi' , 'moi', $entete2) ;
ça n'a pas l'air d'être mieux ?

Posté : 02 oct. 2008, 23:17
par AB
En base64, il me semble.
J'crois pas que cela soit nécessaire.
Cela passe sur mes quatre messagerie avec
$headers .= " Content-Transfer-Encoding: 8bit\n\n";
Je réserve la base64 pour l'encodage de fichiers joints...

Y'a t-il parfois des pb avec un encodage 8 bits et l'UTF8 ???

Posté : 02 oct. 2008, 23:22
par Berzemus
(pour répondre à AB, un peu en dehors du sujet, pardon)
Avant il me semble que les transferts n'étaient pas "8-bit safe". Mais j'ai oublié de quand date "avant", quelque part entre '69 et aujourd'hui. Y'a des chances que ce ne soit plus le cas. Sauf pour le minitel, ou il faut encoder en morse.