Page 1 sur 1

Problème de lecture d'accents

Posté : 03 mars 2014, 17:54
par Flav88
Bonjour, voilà, j'explique mon problème, j'utilise un système de news php, qui me permet de poster des news depuis une administration, le hic ? Les accents ne se lisent pas ! Par exemple, au lieu du "é" j'ai un "é", voici le codage de tout mon système, est ce que quelqun pourrait m'aider, me dire ce que je dois faire ?

table_news.sql

Code : Tout sélectionner

CREATE TABLE news ( id int(6) NOT NULL auto_increment, auteur VARCHAR(30) NOT NULL, titre text NOT NULL, date datetime NOT NULL default '0000-00-00 00:00:00', texte_news text NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM;
news.php

Code : Tout sélectionner

<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'password'); mysql_select_db('nom_base', $base); // lancement de la requête. on sélectionne les news que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC) tout en ne sélectionnant que le nombre voulu de news à afficher (LIMIT) $sql = 'SELECT auteur, titre, date, texte_news FROM news ORDER BY date DESC;'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on compte le nombre de news stockées dans la base de données $nb_news = mysql_num_rows($req); if ($nb_news == 0) { echo 'Aucune news enregistrée.'; } else { // si on a au moins une news, on l'affiche while ($data = mysql_fetch_array($req)) { // on décompose la date sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec); // on affiche les résultats echo '<br />News de : ' , htmlentities(trim($data['auteur'])) , '<br />'; echo 'Titre : ' , htmlentities(trim($data['titre'])) , '<br />'; echo 'Postée le : ' , $jour , '/' , $mois , '/' , $an , ' à ' , $heure , ':' , $min , ':' , $sec , '<br /><br />'; echo 'News : ' , nl2br(htmlentities(trim($data['texte_news']))) , '<br />'; } } // on libère l'espace mémoire alloué à cette requête mysql_free_result ($req); // on ferme la connexion à la base de données mysql_close (); ?>
index.php

Code : Tout sélectionner

<html> <head> <title>Index de mon site WEB</title> </head> <body> <!-- code HTML avant l'affiche des news (tout dépend comment est constitué votre site) --> <?php // on inclut l'affichage de nos news include ('news.php'); ?> <!-- code HTML après l'affiche des news (tout dépend comment est constitué votre site) --> </body> </html>
insert_news.php

Code : Tout sélectionner

<?php // on teste si le formulaire a été validé if (isset($_POST['go']) && $_POST['go']=='Poster la news') { // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'password'); mysql_select_db('nom_base', $base); // on teste la déclaration de nos variables if (!isset($_POST['auteur']) || !isset($_POST['titre']) || !isset($_POST['news'])) { $erreur = 'Les variables nécessaires au script ne sont pas définies.'; } else { if (empty($_POST['auteur']) || empty($_POST['titre']) || empty($_POST['news'])) { $erreur = 'Au moins un des champs est vide.'; } // si tout est bon, on peut commencer l'insertion dans la base else { // lancement de la requête d'insertion $sql = 'INSERT INTO news VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['titre']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['news']).'")'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base de données mysql_close(); // on redirige vers la page d'accueil du site (attention, cette redirection ne fonctionne qui si vous avez placé cette page dans un répertoire à partir de la racine du site). Si ce n'est pas le cas, veuillez entrer ici le bon chemin d'accès afin de retomber sur la page d'accueil du site. header('Location: ../index.php'); // on termine le script courant exit(); } } } ?> <html> <head> <title>Insertion d'une nouvelle news</title> </head> <body> <!-- on fait pointer le formulaire vers la page traitant les données --> <form action="insert_news.php" method="post"> <table> <tr><td> [b]Auteur :[/b] </td><td> <input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>"> </td></tr><tr><td> [b]Titre :[/b] </td><td> <input type="text" name="titre" maxlength="50" size="50" value="<?php if (isset($_POST['titre'])) echo htmlentities(trim($_POST['titre'])); ?>"> </td></tr><tr><td> [b]News :[/b] </td><td> <textarea name="news" cols="50" rows="10"><?php if (isset($_POST['news'])) echo htmlentities(trim($_POST['news'])); ?></textarea> </td></tr><tr><td><td align="right"> <input type="submit" name="go" value="Poster la news"> </td></tr></table> </form> <?php // on affiche les erreurs éventuelles if (isset($erreur)) echo '<br /><br />',$erreur; ?> </body> </html>

Re: Problème de lecture d'accents

Posté : 03 mars 2014, 18:08
par Ryle
C'est un problème d'encodage :)

Les données que tu stockes dans ta base sont encodées d'une certaine manière (à priori en ISO), alors que lorsque tu les affiches, elles sont considérées comme étant dans un autre jeu de caractères (UTF-8). L'interprétation des accents dans ces deux jeux de caractères ne correspondant pas, il t'affiche ce qu'il trouve à la place...

Il faut donc uniformiser l'encodage de ta base de données et celui de tes page (via balises headers de ta page)

Re: Problème de lecture d'accents

Posté : 03 mars 2014, 18:22
par Flav88
D'accord, je vois, donc, par logique, je dois insérer un code du genre "
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />" or, je l'ai fais sur la plupart de mes pages où se trouvent mon système de news, et là toujours le même problème, je comprend pas..

Re: Problème de lecture d'accents

Posté : 03 mars 2014, 19:05
par xTG
Il n'y a malheureusement pas que cette ligne. :)
Un très bon article sur le sujet : faq-tutoriels/encodage-utf-t245062.html

Re: Problème de lecture d'accents

Posté : 03 mars 2014, 19:58
par Flav88
Oulah, voilà beaucoup de lecture que tu 'mapportes, te serait-il possible de me donner toutes les lignes à mettre s'i lte plait ?

Re: Problème de lecture d'accents

Posté : 04 mars 2014, 12:35
par Flav88
J'ai essayé tout ce qui était indiqué dans le tutoriel, pour le moment, rien de positif.. j'aimerais que quelqun m'aide, merci !

Re: Problème de lecture d'accents

Posté : 04 mars 2014, 14:11
par xTG
On peut t'aider mais il va falloir des informations sur ce que tu as mis en place et ce qui te bloque ou ne fonctionne pas.
Parce que rien de positif c'est un poil vague. ;)

Re: Problème de lecture d'accents

Posté : 04 mars 2014, 20:39
par Flav88
Sur le tutoriel, il m'est indiqué de:
-mettre le meta en tête de page
-mettre mes pages en UTF-8 dans ma bdd
-d'ajouter un code devant mes "mysql_dbconnect"
Tout est fait, or j'ai encore ce souci d'accents, vous pouvez aller voir sur mon site, http://www.danstaface.bl.ee/test ! Je ne comprend pas d'où vient le problème, peut être que tu pourras m'aider ^^

Re: Problème de lecture d'accents

Posté : 04 mars 2014, 21:19
par xTG
J'ai juste regardé le code source généré sur la première page de ton site...
Et oui je me suis bien pris une saleté dans la face...
La balise HTML elle est où ?
<html>
  <head>
  ...
  </head>
<body>
contenu
</body>
</html>
Tu devrais faire valider ton site en W3C, ton code HTML n'est absolument pas portable.
Ce qui veut dire que d'un navigateur à un autre il est possible qu'il ne s'affiche pas correctement (voire pas du tout).

De plus tu as ceci qui se trimbale sur ta page :
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
Je ne sais pas s'il sera interprété là où il est, mais dans tous les cas il est après la déclaration pour l'utf-8. (dernier arrivé, dernier pris en compte)
Tu as du ménage à faire. ;)