Bonjour tout le monde,

Je pense que c'est un sujet très courant mais j'ai eu beau chercher sur internet et tous les forum possible et inimaginable mon problème ne se solutionne pas.

Je fait une galerie photo et j'ai choisie comme encodage utf-8.

Mon problème se pose quand j'insère des enregistrement dans la BD (mysql). lorsque j'insère des caractère avec accent ceux ci sont insérés en caractère spécial dans ma base (é pour é). par contre en lecture de ma base a travers une page web je retrouve bien mes caractères avec accent.

Ce que je ne comprend pas c'est que tous mes fichiers html on la balise :

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>


ma base de donnée est en utf8-general-ci et mes fichiers php on le code :

header( 'content-type: text/html; charset=UTF-8' );


Je code avec notepad++ et celui ci est configurer pour enregistrer mes pages en utf8 sans BOM.

sinon voici mes fichiers pour insérer :

Formulaire.html :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="gal_sql.php">
<p>
<label>Nom de la gallerie : </label><input type="text" name="nom" /><br>
<label>Thème de la gallerie : </label><select name="theme"><br>
    <option value="voyage">Voyages</option>
    <option value="famille">Famille</option>
    <option value="pote">Pote</option>
    <option value="kite">Kite</option>
</select>
<input type="submit" value="Valider" /><br>
</p>
</form>
</body>
</html>


insertion_sql.php

<?php
header( 'content-type: text/html; charset=UTF-8' );
$date = date('Y-m-d');
$nom=$_POST['nom'];
$theme=$_POST['theme'];

		try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    include ("connexion.php");
    
    // On ajoute une entrée dans la table photo
	$bdd->exec("INSERT INTO gallerie(nom,theme,date) VALUES('".$nom."','".$theme."','".$date."')");
    
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

header('Location: rubrique.php'); 
?>



quelqu'un à une idée ?

Merci
Bonjour,

J'ai eu le même problème que vous.

Pour les caractères spéciaux qui s'affichent mal dans la BDD c'est bizarre car votre BDD est en utf8_general_ci... mais bon.

Essayez ceci:
"INSERT INTO gallerie(nom,theme,date) VALUES('".utf8_encode($nom)."','".utf8_encode($theme)."','".$date."')"


a+
Trois choses à prendre en compte:
1. Il faut s'assurer qu'on est bien en UTF-8 d'un bout à l'autre de la chaine, sans mécanisme de conversion qui viendrait pointer le bout de son nez à un moment ou un autre.
2. MySQL a tendance à effectuer des conversions de codage à la volée lorsqu'une donnée est marquée comme étant dans un codage A et que la connexion entre le serveur MySQL et le client (par exemple un script PHP) est dans un codage B. Il faut s'assurer que tout est configuré en UTF-8, y compris la connexion au serveur MySQL.
3. Faire des conversions en PHP à coup de utf8_encode ou utf8_decode, c'est le plus souvent mettre des rustines sans même savoir où le pneu est crevé. À éviter si on ne sait pas très exactement ce que l'on fait.

Pour vérifier les données enregistrées en base, je suppose que tu utilises phpMyAdmin ou un autre client? Si oui, il faut bien réaliser que ce logiciel est lui-même un client MySQL, avec des pages web déclarées avec un codage propre. Si phpMyAdmin affiche "é" pour un "é", c'est peut-être parce que les données sont bien en UTF-8 dans la base mais que la page de phpMyAdmin est déclarée en ISO-8859-1 (latin1)? Ou bien la connexion entre phpMyAdmin et MySQL est déclarée en latin1 et pas en utf8...
Modifié par fvsch (17 May 2011 - 14:38)