Bonjour,
je souhaiterai savoir comme je peux faire un code pour remplacer les caractères "é,è,à,ç,ê,ë,â,ä...etc" avant l'envoi dans la base de donnée.

En effet, même si mon site est en utf-8 (affichage, enregistrement) j'ai quand même un problème de caractères.

16 réponses


Guilhem
Auteur
Réponse acceptée

Je bosses sous notepad++. Le mysql_query("SET NAME 'utf-8'") marche pas.
Dans le header bug car je lance une session_start qui bug aussi, mais bon, sinon c'est pas grave y'a juste à remplacer les caractères, je vais me faire un BBCode plus simple.

Merci quand même :).

Guilhem
Auteur

Non, je vais essayer, merci.

Guilhem
Auteur

Cela ne marche pas.

Hum enfin attend je crois que j'ai confondu deux fonctions alors je suis pas sur que ça marche...

Lors de l'enregistrement, tu utilises une fonction du genre addslashes, htmlentities, htmlspecialchars pour protégé tes valeurs ?

function convert_in_utf8($string){
    //bon caracteres
    $GoodCharaters = array ("¡","¢","£","¤","¥","¦","§","¨","©","ª","«","¬","*","®","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","×","÷","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","ø","ù","ú","û","ü","ý","þ","ÿ");
    //Mauvais caractères
    $BadCharacters = array ("¡","¢","£","¤","Â¥","¦","§","¨","©","ª","«","¬","Â*","®","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","×","÷","À","Á","Â","Ã","Ä","Ã…","Æ","Ç","È","É","Ê","Ë","ÃŒ","Í","ÃŽ","Ï","Ð","Ñ","Ã’","Ó","Ô","Õ","Ö","Ø","Ù","Ú","Û","Ãœ","Ý","Þ","ß","à ","á","â","ã","ä","Ã¥","æ","ç","è","é","ê","ë","ì","Ã*","î","ï","ð","ñ","ò","ó","ô","õ","ö","ø","ù","ú","û","ü","ý","þ","ÿ");
    // remplacer les mauvais caracatères par les bons et encoder le tout en utf8
    $string = utf8_encode(str_replace($BadCharacters ,$GoodCharaters ,$string));
    return $string;
    }

Pour le problème de caractère vérifie que apache tourne bien en utf8.

Sinon tu peux utilisé htmlentities() avant insertion dans ta base.

Dans PHP manuel :
htmlentities() est identique à la fonction htmlspecialchars(), sauf que tous les caractères qui ont des équivalents en entités HTML sont effectivement traduits.

Si vous voulez réaliser l'opération inverse, vous devez utiliser la fonction html_entity_decode().

Guilhem
Auteur

Merci jbou43, j'essai ça dans l'aprèm !

Guilhem
Auteur

$string c'est la variable à qui je fais la conversion ?

Normalement tu es pas censé avoir de souci, essaie quand tu te connecte à ta bdd de mettre un
mysql_query("SET NAMES 'utf8'");

Normalement ça évite les soucis d'enregistrement des caractères accentués

Guilhem
Auteur

Marche pas :/.
Sinon, je remplace manuellement les accents par leur caractères en php.
ex: é = é etc...

Met un header ?
header('Content-type: text/html; charset=utf-8');

a tu les accents correctement dans ta base de donnée ?
Regarde avec phpmyadmin.

Guilhem
Auteur

Si j'enregistre mes news de ce type:
"Aujourd'hui à la une du journal....."

Y'aura le signe qui veut dire "à" en badcaracter.
Si j'enregistre:
"Aujourd'hui à la une du journal....."
J'aurais le "à".

Je vais essayer le header mais je pense que ça risque de finir pareil x), en sa marche pas.

Donc on fait un récap.
Tu a bien mi le mysql_query("SET NAMES 'utf8'"); pour dire à sql que tu est en utf8.

  • et cette petite ligne pour dire au navigateur que ta page est en utf-8 header('Content-type: text/html; charset=utf-8');

Tu bosse avec quel logiciel ?

notepad++ bosse en ANSI par default, Regarde dans le menu puis encodage si ta page et en utf8 si non converti la en utf-8. et après retente l'insertion de donnée dans ta base.
Je suis pas sur que cela règle ton problème mais tu peux tenter
Par contre fais attention notpad++ à tendance à convertir des fichier utf-8 en ANSI tout seul.
C'est pour ça que je suis passé à netbeans que je te conseille vraiment

Guilhem
Auteur

Je télécharge Netbeans je vais essayer :), merci.