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

Langage PHP Discussion :

Caractères cabalistiques BDD


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut Caractères cabalistiques BDD
    Bonjour,

    J'enregistre dans ma BDD Sql les mots clés tapés dans le moteur de recherche de mon site.

    La plupart du temps, ces derniers sont correctement enregistré.
    Mais, quelquefois, j'ai des caractères "cabalistiques" tel que :

    • minnéapolis
    • états

    Cela se produit sur les caractères accentués.

    D'où cela provient-il ?
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Problèmes d'encodage : la page n'est pas encodé selon même codage que ta BDD...

    Si ta base est en Latin-0 par exemple, il faut encoder la page en Latin-0.

    Donc soit par un header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=ISO-8859-1');
    soit par dun doctype dans le HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-type" content="text/html; charset=iso-8859-15" />
    Pour etre honnete, me rappel plus exactement si ton erreur vient d'une conversion utf8 ou latin-0... a voir, mais dans l'idée, c'est ça...

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Mais justement !!!!
    Il n'y a aucun encodage !!!!
    Un é = é
    Un à = à

    Ou alors, quelque chose m'échappe .....

    Un coup ça serai bien encodé et un autre non ?
    Puisqu'un coup j'ai bien un é et un autre j'ai un é
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Je serais tenté de supposer que les caracteres bien enregistrés et ceux qui ne le sont pas ne viennent pas de la même page ou du même champ de saisie...

    Peux tu confirmer cela ?

    Par ailleurs, peux tu nous dire comment sont encodés les champs de ta BDD (je crois que c'est interclassement sur phpmyadmin en FR) ?

  5. #5
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Oui, bien sur, les caractères bien enregistrés et ceux qui ne le sont pas proviennent pas de la même page

    Encodegage des champs BDD : latin1_general_ci

    Une piste
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    essayes de coller ça au début de chaque page HTML si c'est pas encore fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-type" content="text/html; charset=iso-8859-15" />
    Sinon, faudrait peut être voir du coté des fonctions de codage/décodage de PHP

  7. #7
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Je ne suis pas sur que tu ai saisi le problème

    Ce n'est pas à l'affichage html que j'ai un problème

    Mais merci quand même
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  8. #8
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Si si, j'ai compris ta question... C'est directement dans les champs de la BDD que tu voit ce problème d'encodage, pas seulement au moment des restituer...

    Je ne sais pas exactement comment fonctionnent les système de codage au niveau HTML, mais je dit ça en partant de la supposition que le POST qui envoie le champs à enregistrer va lui même encoder le texte de la façon dont la page est encodée...

    Donc si ta page est codé en UTF8, il est probable que les champs soumis lors du post soient également envoyés en UTF8, ce qui posera un problème dans la base lorsque MySQL les écriras en tant que Latin-0 dont les codes n'ont pas la même signification...

    Aussi si tu n'as pas encore fait le test, ça ne coute rien d'essayer... Et si ça marche pas, alors là tu peux essayer de mettre un tf8_decode dans ta requete SQL...

  9. #9
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    A ma connaissance, un POST n'encode rien (peut être le serveur ?)
    Sinon tous les caractères accentués seraient encodés

    Je vais essayer un utf8_decode demain (car là je suis fatigué) et je te tiens au courant ....

    En tous cas, merci d'essayer de m'apporter une solution .....

    En fait, le problème ne me gène pas vraiment (1% des données) ....
    C'est plus pour comprendre se qu'il se passe
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Encodegage des champs BDD : latin1_general_ci
    L'interclassement n'est pas un encodage, il définit juste les regles de classement des données.

    Ce qu'il faut plutot voir c'est dans quel format sont écrits tes fichiers PHP.
    Tu n'utiliserais pas xhttprequest par hasard ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    L'interclassement n'est pas un encodage
    C'est bien ce que je me disais puisque je n'encode pas mes données lors de l'insertion. C'est donc de l'utf8 ? Est ce correct ?

    Donc, j'aurai peut etre du commencer par le code :

    Fichier qui enregistre les mots clés saisis par l'utilisateur :
    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
    // Si champ q différent de vide et au moins 4 caractères
    if ( ! empty ($_POST['q']) and strlen($_POST['q']) > 3 ) {
     
     
         // Passage de tout le mot en minuscule
        $str = $_POST['q'];
        $mot = strtolower($str);
     
        // Date du jour
        $date = date ("Y-m-d");
     
        // Connection à la base
        include ("connexion.php");
     
    // ***** On regarde si le mot n'existe pas déjà
        $sql = "SELECT * FROM usa_motscles WHERE motcle = '".$mot."'";
        $result = mysql_query( $sql , $conn );
        $row = mysql_fetch_assoc( $result );
     
    // ***** Si il existe
        if ( mysql_affected_rows ( $conn ) == 1) {
     
            $addition = $row['cumul'] + 1;
     
            // Requete de mise à jour
            $sql = "UPDATE usa_motscles SET cumul = '".$addition."', datemotcle = '".$date."' WHERE motcle = '".$mot."'";
            $result = mysql_query ( $sql, $conn );    
        }
     
    // ***** Si il n'existe pas
        else {
     
            // ***** On regarde si le mot n'existe pas déjà dans la table temporaire
            $sql = "SELECT * FROM usa_motscles_wait WHERE motcle_wait = '".$mot."'";
            $result = mysql_query( $sql , $conn );
            $row = mysql_fetch_assoc( $result );
     
            // ***** Si il existe
            if ( mysql_affected_rows ( $conn ) == 1) {
     
                $addition = $row['cumul_wait'] + 1;
     
                // Requete de mise à jour
                $sql = "UPDATE usa_motscles_wait SET cumul_wait = '".$addition."', datemotcle_wait = '".$date."' WHERE motcle_wait = '".$mot."'";
                $result = mysql_query ( $sql, $conn );    
            }
     
            else {
                // Requete d'insetion
                $sql = "INSERT INTO usa_motscles_wait VALUES ('".$mot."','".$date."','1')";
                $result = mysql_query ( $sql, $conn );
            }
     
        }
     
        mysql_close();
     
    }
    Tous mes fichier sont encodés de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    J'affiche les données de ma BDD de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo htmlentities($row['mot_cle']);
    Et pour finir : Je ne me sert pas d'un xhttprequest (enfin si mais sur une seule page sur un input pour proposer des mots clés. Un auto complete quoi). Mais cette page n'enregistre rien. Elle ne fait qu'afficher...
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    quand je parlais de l'encodage du fichier php, je parlais bien du fichier et non de la page html finale.

    essaie en utilisant mb_strtolower() plutot que strlower()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Cela ne change rien avec mb_strtolower()
    J'ai toujours des caractères cabalistiques !!!

    Quelqu'un a une autre piste ?
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On attend toujours de savoir en quoi sont ecrits tes fichiers php.
    Tu peux le voir avec notepad++ par exemple.

    Tu as essayé sans utiliser xhttprequest ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Est-ce que - par hasard et en désespoir de cause - le problème ne surviendrait pas lorsque tu soumet le texte a enregistrer via une fonction javascript au lieu d'utiliser un simple post ou un simple get (genre quelque chose qui nécessiterait un encode() en JS que tu n'aurais pas mis) ?

  16. #16
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On attend toujours de savoir en quoi sont écrit tes fichiers php.
    Ba en PHP....
    Je ne comprend pas trop le sens de la question en fait ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le problème ne surviendrait pas lorsque tu soumet le texte a enregistrer via une fonction javascript
    Pas du tout ! J'ai posté un peu plus haut mon code. Il n'y a aucun Javascript !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tu as essayé sans utiliser xhttprequest ?
    Je n'utilise pas xhttprequest dans ma page qui enregistre !
    Voir mon code plus haut
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  17. #17
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Je crois que j'ai une piste.
    Dans la page qui enregistre, j'ai omis cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  18. #18
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Perso je m'embrouille encore souvent avec l'encodage, des fois le logiciel sauvegarde la page en latin alors que je balande un header utf8, enfin j'avouerai ne pas avoir eu le temps (je sais c'est pas bien) de bien prendre le concept.
    Seule chose que je sais c'est qu'il m'arrive d'utiliser utf8_encode() ou utf8_decode() j'ai pas encore eu de souci sur un moteur de recherche car il semblerai que les formulaires envoie aussi les caractères, donc je l'utilise pour l'affichage client (bon ayant changer 3 fois de serveur d'explotation et d'OS me suis paumé mais bon ca dépanne tjrs ).
    Règles du club -> Cliquez-ici
    FAQ Hardware -> Cliquez-ici
    Vous avez résolu votre souci ->
    F1 et Google sont vos amis.

  19. #19
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Bon, et bien malgré ma balise "Meta" j'ai toujours des carctères bizarres du style : prãƒæ’ã‚â©noms amãƒæ’ã‚â©rindiens


    Je dois préciser que j'ai bien sur fais l'essai de saisir des caractères accentués.
    Ces dernier sont restitués tels quels ...


    C'est a ni rien comprendre !!!
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  20. #20
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Pour la question sur les fichiers PHP, sabotage voulait savoir dans quel encodage ils sont...

    Pour essayer d'isoler le problème, est-ce que tu peux, dans ta page d'insertion des données, afficher la requête SQL INSERT avant exécution, puis récupérer par un SELECT ce que tu viens d'ajouter dans ta base et l'afficher à la suite ?

Discussions similaires

  1. [PHP 5.3] caractère cabalistique dans bbd
    Par elcoyotos dans le forum Langage
    Réponses: 14
    Dernier message: 15/10/2013, 19h10
  2. problème insertion caractère spécial bdd
    Par cecile38 dans le forum Requêtes
    Réponses: 7
    Dernier message: 30/12/2010, 21h58
  3. Réponses: 1
    Dernier message: 10/02/2009, 14h32
  4. [MySQL] affichage caractère spéciaux bdd vers html
    Par strongwave dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/07/2008, 15h20
  5. insertion des caractères accentués bdd oracle
    Par osman.amine dans le forum SQL
    Réponses: 2
    Dernier message: 09/01/2008, 16h55

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