[RESOLU] Problème d'encodage et base de données

Petit nouveau ! | 6 Messages

14 juil. 2015, 22:35

Bonjour tout le monde,

Je suis confrontée à un problème décrit moulte fois sur les forums mais pourtant je ne trouve pas de solution pour moi.

J'ai des losanges-point d'interrogation à la place de mes accents sur les éléments récupérés de ma base de donnée et / ou carrément des variables qui contiennent des accents qui ne s'affichent pas.

Je gère ma base de donnée avec Sequel Pro. Il me semble que tout est correct, encodé en utf-8- unicode, et collation : utf-8_general_ci. Les champs sont en utf-8. Les pages sont enregistrées en utf-8, et déclarées en utf-8.
J'ai lu que placer : mysql_query("SET NAMES UTF8"); règlait souvent le problème, mais je n'arrive pas à le mettre.

Erreur :
Warning: mysql_query(): Access denied for user 'root'@'localhost' (using password: NO) in /home/httpd/vhosts on line 47 Warning: mysql_query(): A link to the server could not be established in /home/httpd/vhosts/ on line 47

Voici mon code :

Un GRAND merci pour vos lumières.

Code : Tout sélectionner

<?php session_start(); ?> <!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" lang="fr"> <head> <link rel="stylesheet" type="text/css" href="../../css/style.css" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> (....) <?php ini_set('default_charset', 'UTF-8'); // Connexion à la base de données try { $bdd = new PDO('mysql:host=****;dbname=****_ch', '*****_ch', '$******'); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT * from T_MEMBRES order by Prenom asc'); //Affichage de la liste des membres while ($donnees = $reponse->fetch()) { print(" <a class=\"liste\" href=\"editMembres.php?id=".$donnees['id']."\"> ".$donnees['Prenom']." ".nl2br(htmlentities($donnees['Nom']))." </a> "); } $reponse->closeCursor(); ?> (...) <?php if(!isset($_GET['id'])) { (...) } else { function nettoyerChaine($chaine) { $caracteres = array( 'À' => 'a', 'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ä' => 'a', '@' => 'a', 'È' => 'e', 'É' => 'e', 'Ê' => 'e', 'Ë' => 'e', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', '€' => 'e', 'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', 'Ï' => 'i', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Ö' => 'o', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'ö' => 'o', 'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'µ' => 'u', 'Œ' => 'oe', 'œ' => 'oe', 'ë' => 'e', '$' => 's'); $chaine = strtr($chaine, $caracteres); $chaine = preg_replace('#[^A-Za-z0-9]+#', '-', $chaine); $chaine = trim($chaine, '-'); $chaine = mb_strtolower($chaine); return $chaine; } // récupération des données de la table $reponse = $bdd->query('SELECT * FROM T_MEMBRES WHERE id='.$_GET['id'].''); while ($donnees = $reponse->fetch()) { $debutnom = substr($donnees['Nom'], 0, 3); $debutprenom = substr($donnees['Prenom'], 0, 3); $nomphoto = $debutnom . $debutprenom ; $nomphoto = nettoyerChaine($nomphoto); $nomphoto = $nomphoto . ".jpg"; // photos et informations générales print(" <h1>".$donnees['Prenom']."</h1> (...)

Mammouth du PHP | 688 Messages

14 juil. 2015, 22:45

la connexion étant faite avec pdo, il faut aussi utiliser pdo pour exécuter SET NAMES UTF8

si les données n'ont pas été ajoutées par un fichier en utf8 dans une page en utf8, alors aucune méthode ne permettra d'accéder correctement à ces données par la suite. il faut refaire correctement le processus d'ajout.

Petit nouveau ! | 6 Messages

15 juil. 2015, 07:31

Aaaaah ! Un grand M E R C I !!! C'est tout bon :)