Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problèmes d'encodage Javascript - Ajax

    21 juin 2018 à 15:21:59

    Bonjour à tous,

    Je me permets d'écrire ici car je commence à être désespérer pour trouver une solution.

    Le contexte :

    Je travail sur un formulaire dynamique, ou le client doit sélectionner une adresse à l'aide d'une liste déroulante (4 listes plus précisément avec le code postale, la ville, la rue et le numéro de rue). Les adresses sont préalablement installé dans une basse de données Mysql. J'utilise de l'Ajax pour que, lorsque le client sélectionne un code postale, il n'y ai que les villes rattachés qui s'affichent, ainsi de suite...)

    Le problème :

    Lorsque le client sélectionne son adresse, dès lors qu'il y a un accent dans la rue, le numéro ne s'affiche pas, et ça que lorsque le client est sur le navigateur Internet Explorer (Toutes versions confondues) Sur les autres navigateurs testés, (Firefox, Chrome, Safari) il n'y a pas de problèmes.

    J'ai donc procédé par étape pour repérer le problème, j'ai bien vérifié que ma base de données était en UTF-8 absolument partout (Interclassement de communication, de la table, des données), j'ai aussi vérifié que le fichier (que j'importe en .csv dans la bdd) était au bon format, aucuns problèmes, je n'ai pas de soucis lorsque j'effectue la lecture de la table manuellement, tout est propre avec les bons accents.

    J'ai fouillé sur Internet, j'ai mis des headers et des métas avec un charset="utf-8" dès que je pouvais (quand j'appel le script js, sur l'html, etc...)

    Je pense que le problème est causé lorsque mon script Ajax retourne les données de la table, je me suis amusé à utiliser une fonction js pour encoder les variables en dur que je récupère de la table, et la miracle, ça fonctionne, MAIS, ça ne fonctionne pas pour toutes les rues. J'ai en attendant utiliser un userAgent pour que je fasse un encodage dès lors que Internet Explorer est détecté, mais c'est une solution impossible à garder sur le long terme, et en plus ça ne fonctionne pas pour toutes les rues. J'ai aussi essayer de remplacer l'UTF-8 par de l'ISO-8859-1, j'ai tout modifié mais j'ai exactement le même problème...

    Vous êtes réellement mon dernier espoir pour trouver une solution.

    Je remercie d'avance ceux qui s'attarderont sur mon sujet,

    Si vous avez besoin de quoi que ce soit, (bouts de codes ou autre, je répondrais rapidement)

    Merci,

    Joris

    -
    Edité par Joooris 21 juin 2018 à 16:01:49

    • Partager sur Facebook
    • Partager sur Twitter
    Joris
      22 juin 2018 à 17:04:24

      Sachant que ça vient d'IE, j'avoue je ne suis pas sûr que quiconque ait envie de se pencher sur le problème, pour découvrir que c'est dû à un bug ou un non respect des spécifications du JS... Désolé :(
      • Partager sur Facebook
      • Partager sur Twitter
      /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
        22 juin 2018 à 17:08:02

        Bonjour,

        Est-ce que les données concernées ne viennent QUE  de la BDD ?

        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2018 à 20:36:34

          Hello,

          Hypothèse de mon VDD :

          Il faut spécifier le jeu de caractère en sortie lors de ta connexion à la DB, et ce quelque soit l'interclassement....

          Par contre une'entête PHP en utf8 peut suffire pour un script, mais s'il y a une requête SQL je ne sais pas si cela suffit.

          L'as-tu fait ? sinon poste ton instance de connexion...

          -
          Edité par Lucky13 22 juin 2018 à 20:40:35

          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2018 à 21:09:10

            Je suis du même avis que les VDD, dans l'ordre je forcerai le charset comme ceci :

            - au niveau de l'instance de connexion

            - au niveau du script PHP appelé par ta requête AJAX via le header

            - en derniers lieu préciser au niveau du content-type de la requête le charset à utiliser

            Ce qui est bizarre c'est que le soucis n'est que sur IE, si c'était la BDD qui pose problème je pense que tous les navigateurs serait impacter non ?

            Que vois-tu dans la console développeur dans l'onglet network quand tu regarde le retour de la requête ?

            • Partager sur Facebook
            • Partager sur Twitter
              25 juin 2018 à 9:44:30

              Si seul IE rencontre ce problème...c'est probablement que le souci ne vient pas des étapes suivantes. Après, ça ne coute pas grand chose de s'assurer que le reste de la pipeline se comporte correctement. :)
              • Partager sur Facebook
              • Partager sur Twitter
              /!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
                28 juin 2018 à 10:22:57

                Bonjour à tous,

                Je vous remercie pour votre aide,

                Les données concernées ne viennent que de la base de donnée oui, j'ai clairement mis PARTOUT le charset, lorsque je vais chercher les données, lorsque je les reçois, sur tout les scripts appelés... (aussi lorsque j’appelle la BD...) Le plus fou c'est que même si je force l'encodage en utf8 à la main, en mettant un "encode_utf8" sur ma variable, il y a par exemple le caractère "É" qui n'est pas pris en compte, mais sinon ça fonctionne, mais clairement j'ai fait toutes les vérifications 3 - 4 fois, je pensais être passé à coté de quelque chose que je ne connaissais pas étant donné que ça ne fait pas très longtemps que je code, mais j'ai l'impression que c'est juste IE qui fou la *****

                Par contre pour te répondre BoNux, je ne connaissais pas l'outil network, je vais regarder ça de plus prêt.

                Si je ne trouve pas, je pense que je vais passer pas d'autres moyens (effacer les caractères spéciaux lorsque j'importe mon fichier pas exemple), et je vais patienter je pense...

                Encore merci pour les solutions que vous m'avez apportées

                • Partager sur Facebook
                • Partager sur Twitter
                Joris
                  28 juin 2018 à 11:58:19

                  Tu pourrais quand même montrer ta connexion à la BDD ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 juin 2018 à 13:20:19

                    Voici :

                    <?php
                    
                    //connexion à la base de donnée 
                    
                    try
                    
                    {
                    
                    	$bdd = new PDO('mysql:host=localhost;dbname=mabdd;charset=utf8', 'root', 'root');
                    
                    }
                    
                    catch (Exception $e)
                    
                    {
                    
                            die('Erreur : ' . $e->getMessage());
                    
                    }
                    ?>

                    Sinon, j'ai regardé l'onglet Réseau, j'ai bien mes données envoyées correctement, avec le bon encodage, dans mes variables, c'est quand le Ajax les envoies dans mon script PhP que ça ne fonctionne plus apparemment...

                    -
                    Edité par Joooris 28 juin 2018 à 13:32:16

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Joris
                      28 juin 2018 à 13:34:35

                      Donc en effet, tu ne précises pas le charset dans ta connexion. http://php.net/manual/fr/pdo.construct.php
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 juin 2018 à 14:02:42

                        Bonjour,

                        La j'ai besoin d'explication aussi, car il déclare bien le charset dans son instance non ?

                        Comme c'est indiqué dans le cours d'OCR, et le manuel 

                        'mysql:host=127.0.0.1;port=3306;dbname=mysql;charset=utf8','user','password'

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
                          28 juin 2018 à 15:55:08

                          Ah ok, j'ai pas suivie l'édition ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
                            29 juin 2018 à 10:45:10

                            Bonjour,

                            Merci pour ta réponse,

                            Mais du coup j'ai pas trop compris ce que je devais rajouter, j'ai mis ça  comme ça :

                            try
                            
                            {
                            	$bdd = new PDO('mysql:host=localhost;dbname=monuintegration', 'root', 'root', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
                            }
                            
                            catch (Exception $e)
                            
                            {
                                    die('Erreur : ' . $e->getMessage());
                            }

                            Mais ça ne change rien...(j'ai essayé en laissant le charset='utf-8' et en l'enlevant...

                            A savoir que le header est situé dans le fichier Php ou sont situés mes requêtes SQL avant d'appeler ma BD.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Joris

                            Problèmes d'encodage Javascript - Ajax

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown