IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Encodage des accents avec Shoutbox


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut Encodage des accents avec Shoutbox
    Bonjour 8-)


    Je cherche une petit shoutbox pour mon site, et je suis tombé sur un vieux projet open source que voici: https://github.com/metachris/most-simple-ajax-chat-ever


    Meme si ça date ça marche bien et c'est exactement ce que je veux, quelque chose de simple a utiliser sans passer par MySql.Trois fichiers seulement sont nécessaires, un fichier html, un fichier php et un fichier texte pour enregistrer les messages, le code javascript est dans le fichier html.

    IL y a du boulot pour rendre ça plus jolie mais ça marche, sauf pour les caractères suivants : é à è ç

    Problème de lecture de format, j'ai donc rajouté ceci dans mon fichier html:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    Et dans mon fichier php a la première ligne avant le traitement des données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');

    Malgré ces modification je continu a voir mes accents qui s'affichent avec un ?.Je suis sous linux avec apache2 donc après avoir vérifié que mes fichiers étaient bien enregistrés en utf-8, je me suis aperçu que le fichier texte "chat.txt" se converti en iso-8859-1 a chaque message envoyé dans la shoutbox.Avant que je poste un message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    file -i *
    chat.txt:        text/plain; charset=utf-8
    index.html:      text/html; charset=utf-8
    w.php:           text/x-php; charset=us-ascii
    Et après que j'ai posté un message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    file -i *
    chat.txt:        text/plain; charset=iso-8859-1
    index.html:      text/html; charset=utf-8
    w.php:           text/x-php; charset=us-ascii
    J'ai donc essayé de modifier le code php pour qui fasse en sorte de me traduire le tout en utf-8 avec ce morceau de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function writeUTF8File("chat.txt",$content) { 
            $f=fopen("chat.txt","w"); 
            # Now UTF-8 - Add byte order mark 
            fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
            fwrite($f,$content); 
            fclose($f); 
    } 
    ?>
    Et la surprise ça marche mes accents et les caractères spéciaux s'affichent bien... sauf que l'historique du tchat n'est pas gardé, je vois que les deux derniers messages :?

    Voici donc le code javascript qui se situe dans la page html:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <script type="text/javascript" charset="utf-8">
    /* most simple ajax chat script (www.linuxuser.at) (GPLv2) */
    contentType: "application/x-www-form-urlencoded;charset=utf-8"
    var nick_maxlength=10;
    var http_request=false;
    var http_request2=false;
    var intUpdate;
     
    /* http_request for writing */
    function ajax_request(url){http_request=false;if(window.XMLHttpRequest){http_request=new XMLHttpRequest();if(http_request.overrideMimeType){http_request.overrideMimeType('text/xml');}}else if(window.ActiveXObject){try{http_request=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{http_request=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}
    if(!http_request){alert('Giving up :( Cannot create an XMLHTTP instance');return false;}
    http_request.onreadystatechange=alertContents;http_request.open('GET',url,true);http_request.send(null);}
    function alertContents(){if(http_request.readyState==4){if(http_request.status==200){rec_response(http_request.responseText);}else{}}}
     
    /* http_request for reading */
    function ajax_request2(url){http_request2=false;if(window.XMLHttpRequest){http_request2=new XMLHttpRequest();if(http_request2.overrideMimeType){http_request2.overrideMimeType('text/xml');}}else if(window.ActiveXObject){try{http_request2=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{http_request2=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}
    if(!http_request2){alert('Giving up :( Cannot create an XMLHTTP instance');return false;}
    http_request2.onreadystatechange=alertContents2;http_request2.open('GET',url,true);http_request2.send(null);}
    function alertContents2(){if(http_request2.readyState==4){if(http_request2.status==200){rec_chatcontent(http_request2.responseText);}else{}}}
     
    /* chat stuff */
    chatmsg.focus()
    var show_newmsg_on_bottom=1;     /* set to 0 to let new msg´s appear on top */
    var waittime=1000;        /* time between chat refreshes (ms) */
     
    intUpdate=window.setTimeout("read_cont();", waittime);
    chatwindow.value = "loading...";
     
    function read_cont()         { zeit = new Date(); ms = (zeit.getHours() * 24 * 60 * 1000) + (zeit.getMinutes() * 60 * 1000) + (zeit.getSeconds() * 1000) + zeit.getMilliseconds(); ajax_request2("chat.txt?x=" + ms); }
    function display_msg(msg1)     { chatwindow.value = msg1.trim(); }
    function keyup(arg1)         { if (arg1 == 13) submit_msg(); }
    function submit_msg()         { clearTimeout(intUpdate); if (chatnick.value == "") { check = prompt("please enter username:"); if (check === null) return 0; if (check == "") check="..."; chatnick.value=check; } if (chatnick.value.length > nick_maxlength) chatnick.value=chatnick.value.substring(0,nick_maxlength); spaces=""; for(i=0;i<(nick_maxlength-chatnick.value.length);i++) spaces+=" "; v=chatwindow.value.substring(chatwindow.value.indexOf("\n")) + "\n" + chatnick.value + spaces + "| " + chatmsg.value; if (chatmsg.value != "") chatwindow.value=v.substring(1); write_msg(chatmsg.value,chatnick.value); chatmsg.value=""; intUpdate=window.setTimeout("read_cont();", waittime);}
    function write_msg(msg1,nick1)     { ajax_request("w.php?m=" + escape(msg1) + "&n=" + escape(nick1)); }
    function rec_response(str1)     { }
     
    function rec_chatcontent(cont1) {
        if (cont1 != "") {
            out1 = unescape(cont1);
            if (show_newmsg_on_bottom == 0) { out1 = ""; while (cont1.indexOf("\n") > -1) { out1 = cont1.substr(0, cont1.indexOf("\n")) + "\n" + out1; cont1 = cont1.substr(cont1.indexOf("\n") + 1); out1 = unescape(out1); } }
            if (chatwindow.value != out1) { display_msg(out1); }
            intUpdate=window.setTimeout("read_cont()", waittime);
        }
    }
    </script>
    Et le code php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
    header('Content-Type: text/html; charset=utf-8');
        /**
         * Author: chris at linuxuser.at
         * Licence: MIT
         */
        $fn = "chat.txt";
        $maxlines = 1000;
     
        $nick_maxlength = 10;
     
        /* Set this to a minimum wait time between posts (in sec) */
        $waittime_sec = 0;
     
        /* spam keywords */
        $spam[] = "cum";
        $spam[] = "dick";
        $spam[] = "EAT coon";
     
        /* IP's to block */
        $blockip[] = "72.60.167.89";
     
        /* spam, if message IS exactly that string */
        $espam[] = "ajax";
     
        $msg = $_REQUEST["m"];
        $n = $_REQUEST["n"];
     
     
        if ($waittime_sec > 0) {
            $lastvisit = $_COOKIE["lachatlv"];
            setcookie("lachatlv", time());
     
            if ($lastvisit != "") {
                $diff = time() - $lastvisit;
                if ($diff < $waittime_sec) { die(); }
            }
        }
     
        if ($msg != "") {
            if (strlen($msg) < 2) { die(); }
            if (strlen($msg) > 3) {
                /* Smilies are ok */
                if (strtoupper($msg) == $msg) { die(); }
            }
            if (strlen($msg) > 150) { die(); }
            if (strlen($msg) > 15) {
                if (substr_count($msg, substr($msg, 6, 8)) > 1) { die(); }
            }
     
            foreach ($blockip as $a) {
                if ($_SERVER["REMOTE_ADDR"] == $a) { die(); }
            }
     
            $mystring = strtoupper($msg);
            foreach ($spam as $a) {
                 if (strpos($mystring, strtoupper($a)) === false) {
                     /* Everything Ok Here */
                 } else {
                     die();
                 }
            }
     
            foreach ($espam as $a) {
                if (strtoupper($msg) == strtoupper($a)) { die(); }
            }
     
            $handle = fopen ($fn, 'r');
            $chattext = fread($handle, filesize($fn)); fclose($handle);
     
            $arr1 = explode("\n", $chattext);
     
            if (count($arr1) > $maxlines) {
                /* Pruning */
                $arr1 = array_reverse($arr1);
                for ($i=0; $i<$maxlines; $i++) { $arr2[$i] = $arr1[$i]; }
                $arr2 = array_reverse($arr2);
            } else {
                $arr2 = $arr1;
            }
     
            $chattext = implode("\n", $arr2);
     
            // Last spam filter: die if message has already been in the chat history
            if (substr_count($chattext, $msg) > 2) { die(); }
     
            $spaces = "";
            if (strlen($n) > $nick_maxlength-1) $n = substr($n, 0, $nick_maxlength-1);
            for ($i=0; $i<($nick_maxlength - strlen($n)); $i++) $spaces .= " ";
     
            $out = $chattext . $n . $spaces . "| " . $msg . "\n";
            $out = str_replace("\'", "'", $out);
            $out = str_replace("\\\"", "\"", $out);
     
            $handle = fopen ($fn, 'w'); fwrite($handle, $out.trim()); fclose($handle);
    } 
    ?>
    En espérant que vous pouvez m'aider a y voir plus clair... ;)

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 668
    Par défaut
    montrez nous un exemple de fichier de messages qui ne fonctionne pas.

  3. #3
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    mb_internal_encoding("UTF-8");
    Il est spécifié que ce doit toujours être la premiree ligne php à interpréter...

  4. #4
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut
    Merci de vos réponses, j'ai ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    mb_internal_encoding("UTF-8");
    sans succès.

    montrez nous un exemple de fichier de messages qui ne fonctionne pas.
    Voici le retour d'un message qui ne s'affiche pas correctement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test      | �a marche ou pas
    Test      | non �a ne marche pas
    Test est le pseudo et le reste c'est le message, ce symbole étrange s'affiche uniquement avec ces caractères: ç é à è quand je regarde dans le fichier chat.txt ils s'affichent correctement pourtant.

  5. #5
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    que donne la page phpinfo sur le charset ??

    a tu lu ce tuto ?
    http://j-willette.developpez.com/tut...-site-en-utf8/

  6. #6
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    si ton php est bien en utf8 alors ==> http://php.net/manual/fr/function.ht...ars-decode.php

    et c'est un secret impossible à divulguer ??
    Citation Envoyé par psychadelic Voir le message
    que donne la page phpinfo sur le charset ??
    la suite attendait aussi une réponse...
    Citation Envoyé par psychadelic Voir le message

  7. #7
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut
    Je suis bien en utf-8 c'est a ni rien comprendre ce truc.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    default_charset	UTF-8	UTF-8

    Il y a pas moyen que quelqu'un essai le code de la shoutbox ? ça tient en 3 fichiers et c'est rapide a faire, que je sache si je suis vraiment nul ou qu'il y a un problème avec le code du projet...


    https://github.com/metachris/most-simple-ajax-chat-ever

  8. #8
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Citation Envoyé par usert745 Voir le message
    Merci de vos réponses, j'ai ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    mb_internal_encoding("UTF-8");
    sans succès.
    Bizare l'a tu bien placé en Première ligne du script applé en Ajax ?

    Citation Envoyé par usert745 Voir le message
    Voici le retour d'un message qui ne s'affiche pas correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test      | �a marche ou pas
    Test      | non �a ne marche pas
    Test est le pseudo et le reste c'est le message, ce symbole étrange s'affiche uniquement avec ces caractères: ç é à è quand je regarde dans le fichier chat.txt ils s'affichent correctement pourtant.
    ça ce sont des html entities (d'utf8 vu leur codes), elles sont soit générées par le JS, soit par le PHP, il faut juste alors les encoder au moment de l'écriture dans ton fichier texte, sauf si l'utilitaire de lecture de ces données en ligne, qui doit les afficher le fait en html, auquel cas il faut pas les toucher.

    et de toutes façons ça n’empêche pas non plus que tu ai aussi un pb de charset, faut régler les 2 pb

  9. #9
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut
    Bizare l'a tu bien placé en Première ligne du script applé en Ajax ?
    Oui, je l'ai bien mis en première ligne.J'ai ajouter l'option "AddCharset utf-8" comme indiqué dans le lien que tu m'as donné, sans résultat non plusLe fichier chat.txt continu de se changer en iso8859-1 a chaque message envoyé alors que je l'ai enregistré en utf-8 par défaut

    .J'avoue que je sèche, ça serait pas le code php ou le javascript qui a un soucis ? sachant que c'est un projet opensource assez ancien ? j'ai laissé un ticket sur son projet github en essayant d'expliquer le problème mais je pense que ce projet n'est plus actif, dommage pour les amateurs de petit site web...

  10. #10
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    et pôur ton probleme d'HTML entities, tu fais quoi ??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb d'affichage des accents avec jdbc et oracle
    Par elamarti dans le forum JDBC
    Réponses: 2
    Dernier message: 09/11/2007, 17h29
  2. [XML][Flash] Problème d'encodage des accents
    Par JoN28fr dans le forum Flash
    Réponses: 20
    Dernier message: 11/10/2006, 21h16
  3. [XML][Flash] Problème d'encodage des accents
    Par JoN28fr dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 06/10/2006, 16h45
  4. [RegEx] Remplacement des accents avec une regex
    Par benohit dans le forum Langage
    Réponses: 7
    Dernier message: 07/09/2006, 18h20
  5. [XML] encodage des accents
    Par matonfire dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 05/05/2004, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo