Remplacement automatique des caractères

Par Guilhem, il y a 15 ans


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, il y a 15 ans

Cela ne marche pas.

GentlemanOwl, il y a 15 ans

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

Guilhem, il y a 15 ans

Non, je vais essayer, merci.

GentlemanOwl, il y a 15 ans

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

MrGuillou, il y a 15 ans
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, il y a 15 ans

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

Guilhem, il y a 15 ans

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

Grafikart, il y a 15 ans

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, il y a 15 ans

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

PhiSyX, il y a 15 ans

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

MrGuillou, il y a 15 ans

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

Guilhem, il y a 15 ans

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.

MrGuillou, il y a 15 ans

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 ?

Guilhem, il y a 15 ans

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 :).

MrGuillou, il y a 15 ans

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, il y a 15 ans

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