Impossible d'afficher les caractères spéciaux

Résolu/Fermé
Marlocq - 18 nov. 2013 à 17:26
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023 - 19 nov. 2013 à 15:14
Bonjour,

J ai un site internet avec ma base de données en utf8, la déclaration de page en utf8 et le codage de celle ci en utf8 mais ma page refuse obstinément d'afficher les caractère spéciaux. J ai fini par trouver que ça venait de ma commande a la BDD si vous pouviez me dire si vous voyez quelque chose qui cloche dedans...

<?php
try{
$DB = new PDO('mysql:host=localhost;dbname=greg_test','root','alpha',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
catch(PDOException $e){
echo 'Impossible de se connecter à la base de donnée';
exit();
}
?>
A voir également:

21 réponses

petit up si quelqu'un pouvait m'aider...
0
SlyK Messages postés 854 Date d'inscription vendredi 11 mars 2011 Statut Contributeur sécurité Dernière intervention 6 octobre 2014 147
19 nov. 2013 à 09:54
Hello,

Est-ce que ta page est aussi encodé en UTF-8 ?


@+
0
Utilisateur anonyme
19 nov. 2013 à 10:13
Bonjour

Ta connexion à la base de données a l'air OK.
Ce problème concerne-t-il seulement les données issues de la base, ou tous les caractères accentués ?
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
Modifié par Marlocq le 19/11/2013 à 12:20
Se problème ne concerne que les données traitées par cette requête la.

Voila ce que ça m'affiche :é à è Test des caractères spéciaux


ça c'est la requete de la page de news qui affiche tout comme il faut:

$requete = ' SELECT * FROM mess_gen ORDER BY date DESC LIMIT '.(($cPage-1)*$parPage).','.$parPage.' ';
$resultat = $db_conn->query($requete);

$nb_lig_resultat = $resultat->num_rows;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
19 nov. 2013 à 13:12
Se problème ne concerne que les données traitées par cette requête la
Ça veut dire que quand tu affiches des données à partir d'autres requêtes, tu n'as pas ce problème ? J'ai du mal à y croire.
Ton site est-il en ligne pour qu'on puisse se faire une idée ?
Ou sinon, peux-tu nous montrer le code du <head> de ta page, où on voit que tu travailles en utf8 ?
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
19 nov. 2013 à 13:23
Mon site tourne sur un serveur local...

<head>
<title>Librairie en ligne du centre multimédia Don Bosco</title>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="" name="keywords">
<meta content="" name="author">
<meta content="" name="description">
<link href="css/site.css" type="text/css" rel="stylesheet">
<link href="css/calendrier.css" type="text/css" rel="stylesheet">
<script src="javascript/jquery-1.8.1.min.js" language="Javascript" type="text/javascript">
<script src="javascript/calendrier.js" language="Javascript" type="text/javascript">
<script type="text/javascript">
</head>
0
Utilisateur anonyme
19 nov. 2013 à 13:36
Faudrait penser à fermer tes balises <script> avec </script>.
Mais bon, ce n'est pas ce qui explique ton problème.

Tu n'as pas répondu à ma question sur le fait qu'il n'y a vraiment qu'avec cette requête-là que tu as un problème.
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
Modifié par Marlocq le 19/11/2013 à 13:48
Ben ceci est la requète de la page de news par exemple

function db_connect() {
$db_connec = new mysqli('localhost','root','alpha','greg_test');

if (mysqli_connect_errno()) {
echo 'Echec de la connection à la base : '.mysqli_connect_error();
exit ();
} else {
return $db_connec;
}
}

$db_conn = db_connect ();

$requete = ' SELECT * FROM mess_gen ORDER BY date DESC LIMIT '.(($cPage-1)*$parPage).','.$parPage.' ';
$resultat = $db_conn->query($requete);

$nb_lig_resultat = $resultat->num_rows;

Et l'autre plus haut qui fait connexion me permet de récupéré les events pour le calendrier (la page qui bug)
0
Utilisateur anonyme
19 nov. 2013 à 13:58
Comment le texte qui s'affiche mal a-t-il été entré dans la base de données ? À partir d'un formulaire que tu as fait ? Avec phpmyadmin ? Ou d'une autre manière ?
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
19 nov. 2013 à 14:04
A partir d'un formulaire.

Voila l'insertion:

$h1=stripslashes(trim($_POST['h1']));
$hfin=stripslashes(trim($_POST['hfin']));
$groupe=stripslashes(trim($_POST['groupe']));
$titre="<span class=\"red\">$local</span> <span class=\"blue\">de $h1 à $hfin</span> <span class=\"green\">$nom $prenom</span> groupe: $groupe";
$fac="non";
$db_conn = db_connect ();
$requete = " insert into events (title,date,fac,mail,local,h_deb,h_fin) values ('$titre','$date','$fac','$mail_user','$local','$h1mod','$hfinmod') ";
$resultat = $db_conn->query($requete);
0
Utilisateur anonyme
19 nov. 2013 à 14:17
Je vois que tu mélanges PDO et mysqli. Je suppose que tu n'en es pas conscient.

Tu dis bien à ta connexion PDO de travailler en utf8, mais ta connexion mysqli, elle, ne contient pas de "SET NAMES utf8". Elle ne marche PAS en utf8.
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
19 nov. 2013 à 14:22
Oui mais pourtant c'est ma requête pdo qui bug vu que c'est celle que j'utilise sur le calendrier.

Le projet de se site c'est étalé sur 2 ans donc je suis passé au PDO entre temps sans modifier les pages préalablement faite (en mysqli).

Donc pour toi je devrais modifier ma requête mysqli ?
0
Utilisateur anonyme
19 nov. 2013 à 14:30
Pas ta requête, ta connexion.
Comme pour PDO, il faut dire à mysqli que tu travailles en utf8. Je viens de jeter un coup d'oeil à la doc, ils déconseillent d'utiliser SET NAMES comme en PDO. Il y a une fonction faite pour :

function db_connect() { 
$db_connec = new mysqli('localhost','root','alpha','greg_test');

if (mysqli_connect_errno()) {
echo 'Echec de la connection à la base : '.mysqli_connect_error();
exit ();
} else {
$db_connec->set_charset("utf8");
return $db_connec;
}
}
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
19 nov. 2013 à 14:34
Bon je viens de testé ta requête le résultat est que ça n'affiche plus les caractères avec accent. Le bug viendrait du fait de déclaré l'utf8...
Je ne comprend pas trop pourquoi.
0
Utilisateur anonyme
19 nov. 2013 à 14:39
Il n'y a pas de raison, l'utf8 marche très bien si tout est fait correctement.
Maintenant, les données qui avaient été mal enregistrées auparavant ne vont pas être 'réparées'.
J'ai quelques questions :
Peux-tu m'expliquer pourquoi ton INSERT se fait dans la table 'events' alors que ton affichage va chercher dans la table mess_gen ? S'agit-il d'une vue ?
Vois-tu les données insérées avec phpmyadmin ? Ont-elles l'air correctes ?
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
19 nov. 2013 à 14:41
Ha non je me tais. Le problème venais bien de ma connexion mysqli vu que ça ne déclarait pas le charset avant l'insertion dans la BDD je suppose.

Tu a résolu mon problème merci milles fois à toi.
0
Utilisateur anonyme
19 nov. 2013 à 14:42
De rien :)
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
19 nov. 2013 à 14:45
les mess_gen sont pour la table de la page news.

Le truc que je ne comprends pas avec la connexion pdo de mon calendrier c'est comment il sait qu'il doit recherché les info du tableau events alors que rien ne le dit clairement.

En gros pour schématiser

Tableau mess_gen = page de news donc je fais mes requêtes vers ça.
Tableau events = calendrier et la je fais ma requête avec le pdo mais je ne lui dis pas explicitement d'aller dans se tableau mais pourtant ça marche....
0
Utilisateur anonyme
19 nov. 2013 à 14:53
alors que rien ne le dit clairement
Si, si, il y a certainement quelque chose qui le lui dit clairement, aucun doute là-dessus. Mais il faudrait tout le code de la page news, et peut-être des pages incluses, pour te montrer exactement où
0
Marlocq Messages postés 117 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 10 septembre 2023
Modifié par Marlocq le 19/11/2013 à 15:15
class Date{

var $days = array('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi','Dimanche');
var $months = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');

function getEvents($year){
global $DB;
$req = $DB->query('SELECT id,title,date,fac FROM events WHERE fac="oui" and YEAR(date)='.$year.' ORDER BY title');
$r = array();
while($d = $req->fetch(PDO::FETCH_OBJ)){
$r[strtotime($d->date)][$d->id] = $d->title;
}
return $r;
}

function getAll($year){
$r = array();
$date = new DateTime($year.'-01-01');
while($date->format('Y') <= $year){
$y = $date->format('Y');
$m = $date->format('n');
$d = $date->format('j');
$w = str_replace('0','7',$date->format('w'));
$r[$y][$m][$d] = $w;
$date->add(new DateInterval('P1D'));
}
return $r;
}

}

La fonction config c'est la connexion PDO
0
Utilisateur anonyme
19 nov. 2013 à 15:08
Je m'étonne que tu n'aies pas trouvé, il n'y a rien de caché.
La table events apparaît bien au début de la function getEvents de la classe Date. Et dans ton script, on voit bien l'appel à cette fonction.
0