[RESOLU] Problème encodage

Eléphant du PHP | 58 Messages

28 mai 2013, 16:45

Bonjour.

Dans mon site j'affiche un texte stocké dans ma base de données. Comme le site est en français il y a des problèmes avec les accents: mon texte est affiché avec des <?> partout! Je ne trouve pas comment configurer la base ou la table pour que ça marche et je ne sais pas comment régler le problème au niveau de la requete ou du script php.

Pouvez vous m'aider s'il vous plait?

Pour information ma base est sur ipage, les personnes utilisant cet hébergeur et familiers avec son interface seront peut être plus aptes à me conseiller.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 mai 2013, 20:30

salut,


de quoi avancer avec le tuto sur l'encodage faq-tutoriels/encodage-utf-t245062.html


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 58 Messages

28 mai 2013, 21:47

Hum ça ne m'aide pas vraiment.

Mon PHP est en UTF-8 sans BOM. Mon champ dans ma table est aussi en UTF-8 mais j'ai énormement de choix entre UTF-8_bin, UTF-8_unicode_ci, UTF-8_<insérer nom d'une langue>_ci etc. a noter que UTF-8_french_ci n'est pas dans la liste.

J'en ai essayé beaucoup, ça ne change rien.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 mai 2013, 23:20

et la table ?
la base ?

Est ce que tu utilise des fonctions sur les chaines de caractères ? (la plus part ne gère l'utf-8)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 58 Messages

29 mai 2013, 10:42

Voici le code que j'utilise:
$req_text="SELECT description FROM fiches WHERE name='".$name."'";
$res_text=mysql_query($req_text)
		  or die ("fuck ça ne marche pas");
while ($text=mysql_fetch_array($res_text))
	{
		extract($text);
		echo"<br>$description";
	}
et la table ?
la base ?
Je ne saisis pas la question.

Mammouth du PHP | 619 Messages

29 mai 2013, 14:12

Bonjour,

essaie
$req_text="SELECT description FROM fiches WHERE name='".$name."'";
$res_text=mysql_query($req_text)
                  or die ("fuck ça ne marche pas");
while ($text=mysql_fetch_array($res_text))
        {
                extract(utf8_encode($text));
                echo"<br>utf8_encode($description)";
        }
ou
$req_text="SELECT description FROM fiches WHERE name='".$name."'";
$res_text=mysql_query($req_text)
                  or die ("fuck ça ne marche pas");
while ($text=mysql_fetch_array($res_text))
        {
                extract(utf8_decode($text));
                echo"<br>utf8_decode($description)";
        }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 mai 2013, 14:45

Je ne saisis pas la question.
il existe plein de chose à voir dans ton cas :
  • encodage de la base
  • encodage de la table
  • encodage du champ
  • encodage du fichier
  • encodage de la connexion vers le serveurs (set names ...)
  • encoage indiqué dans l'entête http
  • encodage indiqué dans le header html

Est ce que tout est en dans le même charset (urtf-8 ou autre) ?

Pour mysql : utf8_general_ci ou utf8_bin doivent le faire normalement.

@ghost5922 : utf8_encode / utf8_decode sur des tableaux ? O_o
je t'invite à revoir la doc de ces fonctions :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 58 Messages

29 mai 2013, 15:22

  • encodage de la base: latin1 (character set database) utf-8 (character set results)
  • encodage de la table: latin1_swedish_ci
  • encodage du champ: utf-8_bin
  • encodage du fichier: utf-8 sans BOM
  • encodage de la connexion vers le serveurs (set names ...): je ne sais pas
  • encoage indiqué dans l'entête http: je ne trouve pas
  • encodage indiqué dans le header html: je ne trouve pas

Mammouth du PHP | 619 Messages

30 mai 2013, 08:22

Bonjour,

@Moogli : il est dans une boucle je ne pense pas que ce sois un tableau mais une variable


while ($text=mysql_fetch_array($res_text))
{
extract(utf8_encode($text));
echo"<br>utf8_encode($description)";
}

il a bien un echo $description le second utilise une fonction

sinon si c'est un tableau $text en effet cela ne marchera pas je connais bien la fonction mais sur un array on fait pas un echo du coup utf8_encode/utf8_decode a utilise sur tes variables et non sur un array :p

Eléphant du PHP | 58 Messages

30 mai 2013, 16:21

$description renvoie directement ce qui est contenu dans le champs "description" de la table

Mammouth du PHP | 619 Messages

30 mai 2013, 17:49

Re,

Ok donc teste
echo"<br>utf8_encode($description)";
ou
echo"<br>utf8_decode($description)";

Eléphant du PHP | 58 Messages

31 mai 2013, 16:43

Dans les deux cas:
Warning: mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at 'reading initial communication packet', system error: 113 in ****************************************/requetes.php on line 2
Could not connect: Lost connection to MySQL server at 'reading initial communication packet', system error: 113
EDIT: ya un bug au niveau du serveur visiblement, tout plante, je reviens quand ça se calme.
EDIT 2: c'est bon ça s'est calmé. Votre méthode ne marche pas. Ca m'affiche ceci "utf8_encode(....)" dans le texte. Je me suis inspiré de la méthode par contre et maintenant ça marche. voici mon code pour ceux qui auront le même problème:
$req_text="SELECT description FROM fiches WHERE name='".$name."'";
$res_text=mysql_query($req_text)
		  or die ("fuck ça ne marche pas");
while ($text=mysql_fetch_array($res_text))
	{
		extract($text);
		$description=utf8_encode($description);
		echo"<br>$description";
	}