pb caracteres bizarres php mysql

Comment résoudre le problème des caractères spéciaux en PHP/MySQL ?

Lorsqu’on développe un site web via le langage PHP accédant à une base de données MySQL, on est souvent confronté avec le problème d’affichage de caractères bizarres. En fait, ces caractères ne sont autre que les caractères spéciaux.

Quels sont les caractères qui peuvent causer un problème d’affichage ?

Les caractères qui s’affichent sous forme de signes cabalistiques sont particulièrement :

  • les lettres accentuées tels que é, è, ê, ë, …
  • les caractères spéciaux tels que : €, &, ©, …

caracteres accentues

Caractères accentués

Ces caractères sont remplacés par des symboles “chinois” tels que é, � ou des points d’interrogation surtout dans le cas d’accès à des informations en langues afro-asiatiques.

caracteres arabes 1

Caractères arabes

Qu’est ce qu’un encodage ?

En informatique, les caractères sont affichés selon leurs types d’encodage. D’après Wikipedia, l’encodage ou le “codage de caractères définit une manière de représenter les caractères (lettres, chiffres, symboles) dans un système informatique.”

Il existe un encodage spécifique pour chaque langue ou groupe de langues. Par exemple pour afficher un texte en langue française, il y a le jeu de caractères : iso-8859-1.
Mais, lorsqu’il s’agit de mixer entre plusieurs langues, il nous faut un encodage universel. Pour ce faire, il suffit d’utiliser le jeux de caractères : UTF-8.

Comment résoudre le problème de caractères bizarres ?

Afin de résoudre le pb d’affichage de caractères bizarres, il faut que toutes les ressources utilisées soit du même encodage.

En fait, il s’agit d’harmoniser le jeux de caractères pour :

  • L’enregistrement du fichier
  • Le code source du HTML
  • Le code source du PHP
  • L’encodage de la base de données MySQL

L’enregistrement de fichier

Lors de la sauvegarde des fichiers HTML, PHP, … à travers votre éditeur, il faut qu’elle soit en UTF8.
Dans le cas de l’éditeur Dreamweaver, il suffit de paramétrer les “Propriétés de la page” et ce à travers le menu “Modifier > Propriétés de la page” ou utiliser le raccourci “Ctrl+J”.

encodage dreamweaver

Dans le cas de Notepad++, il suffit de sélectionner le jeu de caractères souhaité à travers le menu “Encodage”.

encodage notepad

Le code source du HTML

Dans le code source HTML, il faut indiquer le charset via la balise meta :

<meta http-equiv= »Content-Type » content= »text/html; charset=utf-8″ />

Le code source du PHP

Au niveau du code PHP, l’utilisation des fonctions telles que include(), require() … peut engendrer des problèmes d’affichage.

Pour corriger ces défauts, il existe plusieurs solutions :

  • Configuration de l’entête HTTP via PHP pour définir le charset souhaité : <?php header(‘Content-type: text/html; charset=UTF-8’); ?>
  • Utilisation de fonctions telles que utf8_encode(), utf8_decode(), iconv(), …

L’encodage de la base de données

Généralement, dans une base de données, l’encodage doit être défini à plusieurs niveau :

  • La base en globalité
  • La table
  • Le champ

Pour afficher les caractères accentués de façon correcte, il suffit d’indiquer le charset lors de la connexion à la base que ce soit lors de l’utilisation de la fonction :

  • mysql_query() : <?php mysql_query(« SET NAMES ‘utf8′ »); ?>
  • PDO : <?php $dbh = new PDO(‘mysql:host=localhost;dbname=test’, $user, $pass);
    $dbh->exec(« SET CHARACTER SET utf8 »); ?>