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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    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 ?

  2. #2
    Membre chevronné
    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
    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 éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    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 é

  4. #4
    Membre chevronné
    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
    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 éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    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

  6. #6
    Membre chevronné
    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
    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 éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    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

  8. #8
    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
    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

  9. #9
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    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...

  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
    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

  11. #11
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    Par défaut
    Cela ne change rien avec mb_strtolower()
    J'ai toujours des caractères cabalistiques !!!

    Quelqu'un a une autre piste ?

  12. #12
    Membre confirmé Avatar de raffa
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 28
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 194
    Par défaut
    Citation Envoyé par elcoyotos Voir le message
    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 ?
    En haut de ton script essai en plaçant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $set_names = mysql_query("SET NAMES 'latin1'");

  13. #13
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    Par défaut
    J'ai essayé avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $set_names = mysql_query("SET NAMES 'latin1'");
    Résultat : Ca ne change rien !

    Pour vous donner une idée :



  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
    Par défaut
    On en arrive toujours au meme point : quel utilisateur provoque ces problemes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre éclairé Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Par défaut
    Bonjour,

    Je vais ajouter mon grain de sel pour avoir beaucoup trimé la dessus, et avoir mis un point final à tous mes problèmes.

    Tu nous parles à un moment du fait que çà n'arrive jamais en local. Ceci vient peut être du fait du default charset d'apache, qui est en latin chez toi, et en utf8 sur le serveur distant.

    Ensuite pour moi le meta charset ne sert pas à grand chose car il ne semble pas toujours utilisé, je le mets quand même, mais je le double en utilisant la fonction header de PHP qui envoi le contenu du meta charset. Et pour finir il y a l'encodage du fichier PHP (ce qu'évoque sabotage). Pour ton cas j'ai cru lire que c'était de l'ANSI, donc là c'est bon tu touches à rien.

    Pour ce qui est d'un utilisateur spécifique qui mettrait le bordel en forçant l'usage de l'utf8 dans son navigateur je n'y crois pas. Enfin même si qq un force l'encodage, l'envoi d'un header charset doit surpasser cette configuration.

  16. #16
    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
    Par défaut
    Pour ce qui est d'un utilisateur spécifique qui mettrait le bordel en forçant l'usage de l'utf8 dans son navigateur je n'y crois pas. Enfin même si qq un force l'encodage, l'envoi d'un header charset doit surpasser cette configuration.
    Personnellement j'ai testé, si tu forces ton navigateur dans un encodage, tu salopes tout.
    J'ai croisé le cas recemment sur le forum egalement, tous les messages de l'utilisateur (forum, mp) avait des accents salopés.

    Pour le cas de notre ami, si j'ai bien compris, ce n'est pas seulement qu'en local ce ne fonctionne pas, c'est que lui même quand il post, les accents passent bien non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    Par défaut
    Bon,

    Alors pour l'instant, j'enregistre l'ip pour tracer un éventuel "fauteur de troubles"

    Message à sabotage :
    Dans un de des posts précédent du me dis que je ne devrai pas utiliser un mysql_affected_rows() avec un SELECT mais plutôt un mysql_num_rows()
    or j'ai fait l'essai et voilà ce que ça me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning:  mysql_num_rows(): supplied resource is not a valid MySQL result resource in ...
    Du coup j'utilise mysql_affected_rows() puisque ça ne renvoie pas d'erreur ....

    Désolé mais j'aime bien comprendre ....

  18. #18
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    499
    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 : 499
    Par défaut
    Huntress, merci de te pencher sur mon problème
    Tu dis :
    Tu nous parles à un moment du fait que çà n'arrive jamais en local
    Sauf erreur de ma part, je n'ai jamais dit que cela n'arrivait jamais en local.
    J'ai dis que cela n'arrivait jamais de chez moi
    Je teste toujours sur le serveur de mon hébergeur et jamais en local

    J'ai croisé le cas recemment sur le forum egalement, tous les messages de l'utilisateur (forum, mp) avait des accents salopés.
    Sabotage, c'est ce que je fini par penser (qu'un utilisateur soit en utf8 dans son navigateur) car c'est le seul script (moteur de recherche) ou j'ai ce problème....

    quel utilisateur provoque ces problemes ?
    Ba je n'en sais rien, je n'enregistre que le mot clé tapé

    Du coup, j'ai testé aussi et effectivement, si, je mes mon navigateur en utf8, je retrouve les caractères cabalistiques.
    Ce qui est étonnant, c'est qu'une fois la page chargée, mon navigateur (FF) se remet tout seul en ISO 8859 1

    Bon, maintenant, je sais d'où cela provient. Quelle solution me conseillez vous (parce que j'ai beau mettre des "header('Content-Type: text/html; charset=iso-8859-1');" cela ne change rien).

    • Filtrer les caractères qu'on m'envoie ?
    • Filtrer les IP ?
    • Autre ?

    En tous cas, un grand merci à vous tous

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, 20h10
  2. problème insertion caractère spécial bdd
    Par cecile38 dans le forum Requêtes
    Réponses: 7
    Dernier message: 30/12/2010, 22h58
  3. Réponses: 1
    Dernier message: 10/02/2009, 15h32
  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, 16h20
  5. insertion des caractères accentués bdd oracle
    Par osman.amine dans le forum SQL
    Réponses: 2
    Dernier message: 09/01/2008, 17h55

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