8795 sujets

Développement web côté serveur, CMS

bonsoir,

je voudrais utiliser l'encodage utf8 au moment où je fais la requête sql, avec SET NAMES utf8 et SET CHARACTER SET utf8 mais ça marche pas, les caractères de ma base (encodée en utf8) ne s'affichent pas.

j'ai fait une erreur dans mon code??

merci

<?php 
$host = 'localhost';
$db = 'carbase';
$user = 'root';
$pwd = '';

try 
	{
	  $connexion = new PDO("mysql:host=$host;dbname=$db", $user, $pwd);
	}
	catch(Exception $e)
	{
	  echo 'Erreur : ' . $e->getMessage(). '<br />';
	  echo 'N° : ' . $e->getCode();	
	  die();		  
	}
$resultats = $connexion->query("SELECT * from vehicules");
$connexion->query("SET NAMES utf8");
$connexion->query("SET CHARACTER SET utf8");
$resultats->setFetchMode(PDO::FETCH_OBJ);
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans nom</title>
</head>
<?php
while($ligne = $resultats->fetch() )
  {   ?>
	 <p><?php echo 'Observations : ' . $ligne->observations; ?></p>	
<?php   }
$resultats->closeCursor();
?>
<body>
</body>
</html>

Oups,

je viens de trouver la solution sur le net, il fallait que j'utilise exec au lieu de query et que j'inverse l'ordre des requêtes, comme ceci..

$connexion->exec("SET NAMES utf8");
$connexion->exec("SET CHARACTER SET utf8");
$resultats = $connexion->query("SELECT * from vehicules");
$resultats->setFetchMode(PDO::FETCH_OBJ);


quelqu'un peut il m'expliquer pourquoi?

est ce que c'est la bonne manière de faire ?.... je suis en train de découvrir PDO...

merci
je relance le post, car j'ai encore un problème d'accents avec les dates.

j'utilise le code suivant pour afficher les dates à la française, en combinaison ave le code présenté au début de ce post, mais les accents ne passent pas dans les jours des mois comme décembre.. ou février, le é est remplacé par un signe cabalistique.

      setlocale (LC_TIME, 'fr_FR.utf8','fra');
      $entree = strftime('%d %B %Y', strtotime($ligne->date)); 



je ne comprends pas, cette fois ci je suis en utf8 partout !!
pour que ça s'affiche correctement, je dois faire

<p>site mis à jour le <?php echo utf8_encode($entree); ?></p>



alors que tous mes autres champs de la base de donnée s'affichent correctement au niveau des accents...
Salut salut,

J'ai eu pas mal de soucis avec l'UTF-8 lors du démarrage de mon entreprise. J'ai du modifier des choses régulièrement avant d'arriver à un résultat "parfait" ou, du moins, sans aucune erreur, à savoir :

- Page en UTF8 + AINSI
- Déclaration du CHARSET dans les pages
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

- Connextion PDO en UTF8
$pdo = new PDO('mysql:host=localhost;dbname=widjoo', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));


Lors des enregistrements, chacune de mes entrées non numérique est ainsi retravaillées :
html_entity_decode($value, ENT_QUOTES, 'UTF-8')


Et idem lors de la sélection, car j'ai énormément de formulaire donc pas mal de <br /> :
nl2br(htmlentities($value, ENT_QUOTES, 'UTF-8'));


Bon je n'ai pas trop le temps de détailler mais peut-être que ça t'aidera, en tous chez moi aucun soucis et mon projet est en plusieurs langues Smiley smile

Bonne soirée & bonnes fêtes de fin d'année,
Gaylord.P