Problème d'encodage de caractères

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 3 Juin 2008.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bonjour,

    Je suis confronté à un soucis d'encodage...

    J'ai une interface admin en utf-8 et les pages vues par les visiteurs sont en iso-8859-1 . J'utilise htmlentities() avant d'enregistrer en bd ce qui fait que les é sont encodés en é .
    J'utilise html_entity_decode() en sortie de bd pour l'affichage et mes é sont affichés en é.
    J'ai éssayé aussi avec utf8_decode et utf8_encode combiné également à htmlentities() et html_entity_decode() mais rien y fait .. j'ai toujours un affichage pourrit de certains caractères...
    Pour un des champs d'enregistrement j'utilise fckeditor qui lui m'enregistre mes é en é et la sa fonctionne !
    Comment dois-je encoder pour obtenir des é car il me semblait que c'était htmlentities() ?

    Merci
     
  2. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Passe tout en utf-8 ! C'était trop la prise de tête avec le passage en phpBB3 qui est tout en utf8 alors j'ai passé mon site en utf8 :)

    A pu de &eacute de mes ...
     
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    J'aimerais bien, mais le soucis est que le site existe depuis un moment et à été créé de façon fixe (page statique) et maintenant par nécessité, je le passe en dynamique.
    Donc toutes mes pages actuelles sont iso-8859-1 et je dois faire avec ... d'ou mon soucis ^^!

    Il doit bien y avoir un moyen simple puisque fckeditor m'encode un des champs correctement.

    Merci
     
  4. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    Et si tu changeais l'encodage de ton interface admin, ça ne serait pas plus simple ?
     
  5. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    avec une fonction faite maison tu devrais remédier à ton probleme :

    Code:
    function TexteUnicode($texte){
    $tab1 = array("à","è","é","ê","ù","»","«","°","œ","oeil");
    $tab2 = array("à","è","é","ê","ù","»","«","°","œ","œil");
    $texte = str_replace($tab1,$tab2,$texte);
    return $texte;
    }
     
  6. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    darkjukka: je me pose la question de savoir pourquoi j'ai encoder en utf-8 au lieu de iso-8859-1 car ta solution si simple soit elle semble fonctionner :wink: ... (la j'ai les boulles ^^).

    KOogar: merci pour ta fonction :D , je la garde de coté pour le moment et je teste tout en iso-8859-1 avant.

    Pour remédier à mes soucis d'encodage actuelle, (à titre indicatif) j'utilise cette fonction:
    Code:
    function jevireaccents($machaine)
    {    
    
        $machaine=($machaine);
        
        $pasaccents = Array("/ç/","/ä§/","/é/","/ä©/","/è/","/ä¨/","/ê/","/äª/","/ë/","/ä«/",
    "/Ê/","/äŠ/","/Ë/","/ä‹/","/î/","/ä®/","/ï/","/ä¯/","/ì/","/ÃŽ/","/äŽ/",
    "/ò/","/ä²/","/ô/","/ä´/","/ö/","/ä¶/","/õ/","/ó/","/ø/","/äµ/","/ä³/",
    "/ä¸/","/Ô/","/ä”/","/Ö/","/ä–/","/Ã/","/ä/","/â/","/ä¢/","/ä/","/ä¤/","/Ã¥/",
    "/ä¥/","/Â/","/ä‚/","/Ä/","/ä„/","/ù/","/û/","/ü/","/ä¼/","/Û/","/Ãœ/","/ä¹/",
    "/ä»/","/ä¼/","/ä¼/","/ä›/","/äœ/","/ò/","/ñ/","/’/");
    
        $dessans = Array("ç", "ç", "é", "é", "è", "è", "ê", "ê", "ë", "ë", "Ê", "Ê", "Ë", "Ë", "î", "î", "ï", "ï", "ì", "Î", "Î", "ò", "ò", "ô", "ô", "ö", "ö", "õ", "ó", "ø", "õ", "ó", "ø", "Ô", "Ô", "Ö", "Ö", "à", "à", "â", "â", "ä", "ä", "å", "å", "Â", "Â", "Ä", "Ä", "u", "û", "ü", "ü", "Û", "Ü", "u", "û", "ü", "ü", "Û", "Ü", "ñ", "ñ", "'");
        
        $machaine = preg_replace($pasaccents, $dessans, $machaine);  
          
        return $machaine; 
    }
    
    Merci à vous :D
     
  7. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Plusieurs solutions, par ordre de préférence décroissant:
    - la meilleure: tout basculer en UTF-8
    - stocker en base en UTF-8, et décoder à l'affichage: utiliser utf8_decode à l'affichage
    - stocker en base en ISO-8859-1: utiliser utf8_encode au moment du stockage (et utf8_decode si jamais tu recharges un truc de la base dans l'interface d'admin)
    - la plus simple, mais tu auras un souci un jour ou un autre: tout laisser en ISO-8859-1

    Quel est l'intérêt d'utiliser des entités HTML?

    Jacques.
     
  8. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    - la meilleure: tout basculer en UTF-8
    Je ne peux pas .. j'ai déjà beaucoup de pages statiques (crée une par une à la main) en ISO-8859-1 et sa m'obligerais à les reprendre une par une.

    - stocker en base en UTF-8, et décoder à l'affichage: utiliser utf8_decode à l'affichage
    Déjà essayé et comme expliqué plus haut, mon site est entièrement en ISO-8859-1. Seul les parties que je créé actuellement (admin entre autre) sont en utf-8, d'ou les soucis d'encodage. Le menu créé dynamiquement est inclue également dans les pages déjà présentes (ISO-8859-1) ce qui génère des soucis entre le charset utilisé dans les pages et l'encodage utilisé avant l'enregistrement en bd.

    - stocker en base en ISO-8859-1: utiliser utf8_encode au moment du stockage (et utf8_decode si jamais tu recharges un truc de la base dans l'interface d'admin)
    Je ne suis pas sur d'avoir comprit!! Passer mon admin en ISO-8859-1 et enregistrer en bd avec utf8_encode. Utiliser utf8_decode seulement pour la partie admin ... la je suis perdu ^^!

    - la plus simple, mais tu auras un souci un jour ou un autre: tout laisser en ISO-8859-1
    Pourquoi ? Quelle soucis?

    Quel est l'intérêt d'utiliser des entités HTML?
    J'en sais rien ... je ne demande pas à avoir des entités HTML lors de mes enregistrements, sa se fait tout seul quoi que je fasse.

    Merci
     
  9. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 828
    J'aime reçus:
    206
    Ce que je ne comprends pas, c'est pourquoi tes pages statiques t'obligent à avoir un encodage dans les pages dynamiques ? Tu peux très bien avoir tes pages dynamiques en utf-8 et les statiques en iso-8859-1 ?
     
  10. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    iconv est ton ami.

    Pas sûr de comprendre... Tu as des données en ISO-8859-1 dans ta BDD?
    Sinon le principe de cette solution est justement de convertir UTF-8 -> ISO ce qui vient de ta bdd avant de l'afficher.

    admin (utf-8 ) -> bdd (utf-8 ) -> utf8_decode -> affichage (ISO)

    J'avais permuté utf8_decode/encode :-(

    En clair:
    admin (utf-8 ) -> utf8_decode -> bdd (en ISO, donc) -> affichage (ISO)

    et bdd -> utf8_encode -> admin si tu "lis" des choses de la bdd dans l'interface admin

    On ne peut pas tout encoder en ISO-8859-1. Même le symbole euro n'existe pas (il faut passer en ISO-8859-15 ou windows-1252 pour l'avoir, et il n'a pas le même code dans les deux cas...).

    Ben tu disais toi même utiliser htmlentities... Qui fait d'ailleurs des choses bizarres parce que tu lui donnes de l'UTF-8 alors qu'il attend de l'ISO-8859-1 par défaut (mais tu peux lui dire que c'est de l'UTF-8, il suffit de lire la doc: http://fr2.php.net/manual/en/function.htmlentities.php)

    Jacques.

    [edit: fix incorrect auto-smileys]
     
  11. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    C'est à cause du menu commun que j'utilise aussi bien sur les pages statiques que dynamiques. J'ai enregistré directement en bd chaque url, titre, description des pages statiques afin d'avoir une meilleurs gestion de mon menu. Je finis par mit perdre moi même :lol: .

    jcaron: merci pour ta réponse précise :D,j'ai testé et sa fonctionne.
    Concernant htmlentities(), j'ai créé un espace membre comportant un formulaire et je l'utilise pour éviter d'avoir des soucis au niveau des balises html, script...
    Ce qui m'amène à une autre question:
    htmlentities() s'utilise avant l'enregistrement en bd ou uniquement en sortie?
     
  12. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Ben tu convertis tout ça en UTF-8 aussi, et hop :)

    Moi je ne l'utiliserais qu'à l'affichage...

    Jacques.
     
  13. biddybulle
    biddybulle WRInaute passionné
    Inscrit:
    30 Mai 2005
    Messages:
    1 428
    J'aime reçus:
    0
    Je reviens sur ce topic puisque j'ai moi même été confronté au problème

    Ainsi avant affichage de la chaîne on la passe dans cette fonction
    Code:
    function JsToDb($msg)
    {
    	$msg = html_entity_decode($msg);
            $msg = addslashes($msg);
    	//$msg = htmlentities($msg);
            
    	$msg = str_replace("é", "é", $msg);
    
    	$msg = str_replace("è", "è", $msg);
    
    	$msg = str_replace("ê", "ê", $msg);
    
    	$msg = str_replace("ë", "ë", $msg);
    
    	$msg = str_replace("à", "à", $msg);
    
    	$msg = str_replace("ä", "ä", $msg);
    
    	$msg = str_replace("â", "â", $msg);
    
    	$msg = str_replace("ù", "ù", $msg);
    
    	$msg = str_replace("û", "û", $msg);
    
    	$msg = str_replace("ü", "ü", $msg);
    
    	$msg = str_replace("ô", "ô", $msg);
    
    	$msg = str_replace("ö", "ö", $msg);
    
    	$msg = str_replace("î", "î", $msg);
    
    	$msg = str_replace("ï", "ï", $msg);
    
    	$msg = str_replace("ç", "ç", $msg);
    
    	$msg = str_replace("&", "&", $msg);
    
    	return $msg;
    }
     
  14. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Si ce n'est pas du déterrage en beauté ça.

    Sinon, ton code, c'est la pire des choses à faire.

    Pour résoudre ces problèmes, il faut comprendre d'où cela provient, sinon cela ne règle rien du tout.
    Voici un article que j'ai écrit il y a plusieurs mois déjà, mais apparemment toujours d'actualité :
    Comment résoudre les problèmes d’accents ?
     
  15. biddybulle
    biddybulle WRInaute passionné
    Inscrit:
    30 Mai 2005
    Messages:
    1 428
    J'aime reçus:
    0
    Tout à fait,

    Perso, j'ai appliqué mon ratio habituel argent / Temps passé = cette solution.

    ca vient pas de mysql déjà ca vient d'une fonctionnalité développée dans cette classe
    http://www.raymondhill.net/blog/?p=441#comment-10463

    Si tu peux d'ailleurs aider Raymond ce serait cool

    Merci
     
  16. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Perso et pour résoudre mon soucis de l'époque, j'avais utilisé simplement utf8_decode() avant enregistrement en bd et utf8_encode() en sortie pour les pages en charset=utf-8.
     
  17. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Un pull a déjà été demandé :
    https://github.com/gorhill/PHP-FineDiff/pulls

    Je ne sais pas si ce dernier résout le problème, mais tu peux déjà y regarder.
     
  18. biddybulle
    biddybulle WRInaute passionné
    Inscrit:
    30 Mai 2005
    Messages:
    1 428
    J'aime reçus:
    0
    Merci tout plein Blount pour avoir regarder. Cela résout mon problème !!

    Je vais poster ce lien sur le blog de Raymond pour les autres
     
Chargement...
Similar Threads - Problème encodage caractères Forum Date
Problème caractères bizzares dans Google (encodage...?) Problèmes de référencement spécifiques à vos sites 14 Février 2008
Problème d'encodage Développement d'un site Web ou d'une appli mobile 30 Janvier 2015
Problème d'encodage caractère Google+ 6 Août 2014
Problème encodage UTF-8 Problèmes de référencement spécifiques à vos sites 4 Octobre 2013
Problème d'encodage... Développement d'un site Web ou d'une appli mobile 2 Mars 2012
Problème d'encodage url les é devient %E9 URL Rewriting et .htaccess 22 Décembre 2011
Problème d'affichage des entrées SQL (encodage) Développement d'un site Web ou d'une appli mobile 16 Avril 2011
Problème encodage de mon Blog utf-8 et iso-latin Développement d'un site Web ou d'une appli mobile 13 Février 2011
Analyse des balises meta problème d'encodage Développement d'un site Web ou d'une appli mobile 8 Février 2011
probleme d'encodage Développement d'un site Web ou d'une appli mobile 26 Octobre 2010
probleme encodage Développement d'un site Web ou d'une appli mobile 17 Avril 2010
Crawl ne dépasse pas la page d'accueil et semblant de problème d'encodage Administration d'un site Web 8 Mars 2010
Problème d'encodage "é" en é ! Développement d'un site Web ou d'une appli mobile 6 Février 2010
Problème d'encodage? Développement d'un site Web ou d'une appli mobile 27 Janvier 2010
problème encodage Développement d'un site Web ou d'une appli mobile 19 Septembre 2009
Problème de fou avec parsage de flux xml traded*** et encodage utf8 en php Développement d'un site Web ou d'une appli mobile 16 Septembre 2009
[MYSQL/PHP] Probleme d'encodage et serialize Développement d'un site Web ou d'une appli mobile 22 Juin 2009
Problème encodage iso et utf-8 Joomla 1.0.15 Développement d'un site Web ou d'une appli mobile 15 Juin 2009
Problème d'encodage Développement d'un site Web ou d'une appli mobile 23 Mai 2009
Problème d'encodage de l'apostrophe ’ Développement d'un site Web ou d'une appli mobile 10 Avril 2009