French English German Italian Russian Spanish
Comment ne plus avoir de caractères bizarres sur son site

Combien de forums, de publications ont étudié le sujet et donné des solutions pour ne plus avoir de caractères avec des arobases, des points d'interrogations et bien d'autres choses aussi incompréhensibles, toutes plus ingénieuses et qui ont sans doute aidé bon nombre de développeurs en herbe.

Cependant après plus de 20 ans de code à mon actif, j'ai décidé de recenser les différentes méthodes, mais il est à préciser que chaque méthode individuellement peut résoudre le problème d'une personne sur les caractères accentués mais pas pour une autre.

En effet tout dépend de l’environnement de développement, de l'hébergement et surtout des programmes et de la base de données existante (bien ou mal paramétrée pour recevoir des caractères spéciaux).

Ma préconisation est d'utiliser toutes les méthodes listées en évitant les conversions par programme, certes cela fonctionne mais ce n'est pas très viable et ce sera à reproduire partout dans vos programmes et vos logiciels, je vous présente tout de même cette méthode de conversion de caractères spéciaux mais sans croire à sa viabilité sur le long terme.

Affichage de caractères spéciaux sur vos pages internet

Première méthode je mets systématiquement le jeu de caractère suivant dans l'en-tête HTML de mes pages internet comme suit avec les caractères spécifiques Français : Windows-1251

<head>

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251"/>

</head>

En complément chacune de vos pages doit être encodée en UTF-8 (sans BOM), ça a l'air d'être compliqué comme ça, mais pas de panique, il suffit d'ouvrir vos fichier HTML, PHP ou autre avec l'éditeur notepad++ (facilement trouvable sur le net).

Puis vous cliquez sur encodage dans le menu en haut et cliquez sur convertir en UTF-8 (sans BOM) si ce n'est pas le cas de chaque fichier.

ATTENTION des fois le logiciel perd les pédales et efface le contenu, il suffit de le fermer sans enregistrer et de recommencer.

Le cas des pages en php et les caractères accentués

Nous pouvons voir 2 méthodes distinctes, dont celle de je vous ai parlé en préambule qui est efficace mais pas sur le long terme.

Option spécifique php pour convertir les caractères spéciaux

Quand une zone ou variable de votre programme a des caractères accentués, il faut essayer ceci en priorité.

echo htmlspecialchars($variable);
echo htmlentities($variable);

La méthode forte pour convertir les caractères spéciaux

J'ai pris ce programme dans mes sites qui fonctionne sur internet pour convertir méthodiquement les caractères notamment accentués, ce code vous pouvez l'adapter pour ajouter des caractères dont je n'ai pas eu besoin.

Tout d'abord vous déclarez vos caractères bizarres qui s'affichent et l'équivalent propre que vous souhaitez :

$modif  = array("û","û","Ã","è","é","ô","à©","í","à´","à¨","à¡","à­a","º"," ", "à±", "à­", "àƒÂ¨"  ,"àƒÂ©"  ,"àƒÂ´"  , "àƒ","à¡","àÂ","à‚ à‚" ,"i±i­", "û", "û" ,"û");

$amodif = array("u"   ,"u"   ,"à","è" ,"é" ,"ô" ,"é" ,"i" ,"ô" ,"è" ,"a" ,"ia" ,"°" ," " , "n" , "i" , "&#232;","&#233;","&#244;", "à" ,"a"  ,"i" ,"&nbsp;","ni"  , "u"   , "u"    ,"u"   );

Puis le code à appeler à chaque variable concernée par ce problème d'orthographe :

$variable = str_replace($modif,$amodif,$variable );

Comme vous le voyez c'est lourd mais efficace et cela marche, je ne l'utilise plus car j'essaye de monter et de coder sur des environments propres, cependant quand l'existant est lourd à modifier, il n'y a pas le choix si un client ne veut pas revoir tout son code.

Les caractères spéciaux dans les bases de données

Créer sa base de données proprement

Déjà il y a la structure de vos tables, souvent créées avec légèreté chez votre hébergeur sans vérifications, il faut que tous les CHAR, VARCHAR, STRING, enfin toutes les zones où il est susceptible d'avoir des chaînes de caractères soient paramétrées en UTF-8.

Insérer les données dans votre base de données de la meilleure façon

Cependant même si la base de données est bien paramétrée, il peut y avoir des failles au niveau de l'insertion de vos variables dans la base :

Exemple de connexion à une base de données en mysql :

$host_name = 'machine';

$database  = 'nom base de donnée';

$user_name = 'utilisateur';

$password  = 'mot de passe';

$conn = new MySQLi($host_name, $user_name, $password, $database);

if ($conn->connect_error) {
echo "!!!!!!!!!!!!!!!!!!!!!!!Erreur de connexion à la base de donnée : " . $conn->connect_error;
exit("Erreur de connexion à la base de donnée.");
}
else {
echo "Connexion réussie à la base de donnée";
}

Conservez bien le code ci-dessus il est infaillible pour une bonne connexion, mais il reste quelque chose à ajouter pour avoir le bon encodage afin de bien alimenter la base :

$conn->set_charset("utf8");

Ceci force le jeu de caractère et donc l'encodage des données.

La commande insert pour préparer ses requêtes sql avec les bons caractères

En effet il y a encore un moyen d'assurer pour ne pas avoir les problèmes de caractères "bizarres" dans votre base de données,

Vous avez 3 variables dans l'exemple d'insertion en mysqli, et vous les faites passer grâce à la commande "mysqli_real_escape_string" par votre connexion à la base de données dans la moulinette pour les transformer en 3 autres variables à insérer dans la base de données.

$variable0 = mysqli_real_escape_string($conn, $prevariable0);
$variable1 = mysqli_real_escape_string($conn, $prevariable1);
$variable2 = mysqli_real_escape_string($conn, $prevariable2);

Puis le code classique d'insertion dans une table de vos variables (à noter ce code est en php)


$insert ="INSERT INTO ma_table ( 
`variable0`,
`variable1`,
`variable2`
) VALUES (
'". $variable0 ."',
'". $variable1 ."',
'". $variable2 ."'
)";
if ($conn->query($insert) === TRUE) {
echo "Insertion ok";
} else {
echo "Error insertion : " . $conn->error;
exit("Chargement table KO= ($conn->error)");
}

A noter pour bien coder pour ne pas avoir de caractères particuliers

Fort de mon expérience, je le répète et le martèle, l'ensemble de ces méthodes sont à mettre en oeuvre avec un bémol sur les changements "manuels", mais quand il n'y a pas le choix, il faut bien.

Quand vous débutez un projet surtout soyez méthodique et suivez bien toutes les recommandations que je viens de vous présenter afin de ne pas vous retrouver avec un site internet illisible faute d'avoir pris les bonnes mesures au démarrage.

Bon code.