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

Eléphanteau du PHP | 49 Messages

25 sept. 2008, 22:32

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
Modifié en dernier par TiFred le 13 oct. 2008, 10:45, modifié 1 fois.
TiFred
Apprenti webmaster

ViPHP
ViPHP | 1996 Messages

25 sept. 2008, 22:36

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">
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 sept. 2008, 22:37

C'est un problème d'encodage UTF-8. Essaye ça:
echo utf8_encode($text) ; 
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 49 Messages

25 sept. 2008, 22:43

C'est pire voilà ce que cela affiche : Frédéric
TiFred
Apprenti webmaster

Mammouth du PHP | 19672 Messages

26 sept. 2008, 05:28

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">
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

02 oct. 2008, 21:46

Bonjour,

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

Mammouth du PHP | 19672 Messages

02 oct. 2008, 22:16

Ç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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

02 oct. 2008, 22:32

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) :?:
TiFred
Apprenti webmaster

ViPHP
AB
ViPHP | 5818 Messages

02 oct. 2008, 22:45

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

Eléphanteau du PHP | 49 Messages

02 oct. 2008, 22:48

Un mail est codé comment ???
TiFred
Apprenti webmaster

ViPHP
AB
ViPHP | 5818 Messages

02 oct. 2008, 22:58

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 ?

ViPHP
ViPHP | 4039 Messages

02 oct. 2008, 22:58

En base64, il me semble.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 49 Messages

02 oct. 2008, 23:13

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 ?
TiFred
Apprenti webmaster

ViPHP
AB
ViPHP | 5818 Messages

02 oct. 2008, 23:17

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 ???

ViPHP
ViPHP | 4039 Messages

02 oct. 2008, 23:22

(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.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.