Gestion des caractères accentués en PHP

patrickg80
Invité n'ayant pas de compte PHPfrance

15 oct. 2014, 20:01

Bonsoir Tout le monde,

Je viens vers vous avec beaucoup d'espoir de trouver satisfaction à mon problème qui me terrorise depuis bientôt plus d'une semaine. Actuellement je suis entrain de supprimer une Application PHP sur un environnement Windows avec comme serveur web XAMPP 1.8.1-0 et PostgreSQL comme serveur de base de données. L'accès à ma base de données se fait via l'interface PDO. Le problème est le suivant : toutes les chaines de caractères que j'enregistre à travers mes formulaires qui contiennent des caractères accentués s'enregistrent dans ma base de données de manière très bizarre. Par exemple le "é" s'affiche ainsi "é". Après avoir fouillé sur Internet et vu quelques éléments de réponses qui ne m'ont pas du tout aidé, je me retourne vers vous en espérant obtenir très rapidement une solution à mon problème.

A titre d'exemple des solutions trouvées sur le net qui n'ont pas marchées :
$db->exec('SET CHARACTER SET UTF8');

ynx
Mammouth du PHP | 586 Messages

16 oct. 2014, 09:20

Salut,

Les caractères du genre "é" en bdd proviennent surement du fait que tu utilises htmlentities() ou htmlspecialchars() sur tes données avant l'insertion en bdd, ce qui n'est pas recommandé.

Le seul traitement utile à effectuer sur des variables avant l'insertion en bdd est d'échapper les caractères spéciaux de la bdd pour éviter les injections sql. Deux solutions avec PDO :
- soit en utilisant des requêtes préparées avec des paramètres
- soit en utilisant la méthode PDO::quote()

Bonne journée

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 oct. 2014, 12:59

Bonjour,

A noter également l'existence de la fonction PHP html_entity_decode() :
http://fr.php.net/html_entity_decode
Quand tout le reste a échoué, lisez le mode d'emploi...