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

PHP & Base de données Discussion :

[SQL] Caractères spéciaux transformés


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut [SQL] Caractères spéciaux transformés
    Salut,

    J'ai une requête qui ajoute des mots dans un table. Juste avant l'insertion, je fais un echo des mots pour vérifier leur orthographe.
    Par exemple: équilibré s'affiche bien équilibré.
    Par contre, avec ce mot, si je regarde après l'ajout dans la table j'ai: équilibré.

    Mon type de champ possède le langage latin1_swedish_ci.

    Comment faire pour bien insérer équilibré?
    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Essaye de convertir ta table dans le set de caractères approprié. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ta_table CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin
    Avec, bien sûr, les recommandations d'usage comme: fais une copie de ta table avant!

    Ce qui marche également sur les SELECT c'est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ta_table COLLATE latin1_bin
    Jamais testé avec un INSERT.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci à toi mais cet interclassement ne fonctionne pas non plus Ni dans le SELECT.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Qu'est-ce que ça m'a déjà énervé ce problème d'accent!

    Et latin1_general_ci non plus sans doute?

    EDIT:

    Que donne:
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Peux-tu fournir le code PHP d'insertion ?
    Pou visualiser le contenu de la base, qu'utilises-tu ?

  6. #6
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Citation Envoyé par ripat
    Qu'est-ce que ça m'a déjà énervé ce problème d'accent!

    Et latin1_general_ci non plus sans doute?

    EDIT:

    Que donne:
    Sur ma page php quand je fais la requête j'ai:
    Array
    (
    [Collation] => big5_chinese_ci
    [Charset] => big5
    [Id] => 1
    [Default] => Yes
    [Compiled] => Yes
    [Sortlen] => 1
    )
    Sinon latin1_general_ci ne change rien.


    Citation Envoyé par Yogui
    Salut

    Peux-tu fournir le code PHP d'insertion ?
    Pou visualiser le contenu de la base, qu'utilises-tu ?
    Mon code d'insertion est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $db->insert = array("word" => trim($_POST['word']));
    $db->insert("_words");
    Je peux aussi mettre la fonction insert() de ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Insérer des données
    function insert($table) {
       global $configuration, $fields, $entries;
       $table = $configuration['prefix'].$table;
       foreach($this->insert as $key => $value) {
          $fields .= $key.',';
          $entries .= $this->quote_smart($value).",";
       }
       $fields = substr($fields, 0, strlen($fields) - 1);
       $entries = substr($entries, 0, strlen($entries) - 1);
       $this->query("INSERT INTO ".$table."(".$fields.") VALUES(".$entries.")");
       $this->insert = array();
    }
    Pour visualiser ma base, j'utilise PhpMyAdmin 2.6.1

    Merci

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut


    Depuis quand y a-t-il des accents (alphabet européen) en chinois ?

    Essaie de faire une table neuve en charset latin et d'y insérer un accent. Les données déjà entrées en bdd sont probablement à supprimer.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    big5_chinese_ci est la première collation par ordre alphabétique. Tu n'as sans doute affiché que la première ligne de ton tableau résultat. Tu dois certainement en avoir d'autres.

    Pour voir ce qui est disponible sur ton serveur MySQL, exécute les requêtes suivantes dans phpMyadmin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHOW CHARACTER SET
    SHOW COLLATION
    Pour voir les valeurs des variables actuelles du serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SHOW VARIABLES LIKE 'character_set%'
    SHOW VARIABLES LIKE 'collation%'
    A partir de là, et après un peu de lecture dans la doc (lien ci-après), essaye plusieurs collations (affichage) ou bien de changer le character set de ta table (ALTER TABLE...).

    A lire en cas de problème d'accents (indigeste mais indispensable)
    http://dev.mysql.com/doc/refman/4.1/en/charset.html

    Vérifie aussi, comme suggéré plus haut, s'il ne s'agit pas d'un problème d'affichage des résultats. Essaye avec un client MySQL en ligne de commande, hors navigateur/html.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  9. #9
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Citation Envoyé par Yogui
    Essaie de faire une table neuve en charset latin et d'y insérer un accent. Les données déjà entrées en bdd sont probablement à supprimer.
    J'ai remis comme interclassement latin1_swedish_ci, et quand j'insère directement un accent à partir de PhpMyAdmin ça fonctionne. Mais pas provenant de mon serveur (EasyPhp).

    ripat, SHOW VARIABLES LIKE 'character_set%' donne:

    array(4) {
    [0]=>
    string(20) "character_set_client"
    ["Variable_name"]=>
    string(20) "character_set_client"
    [1]=>
    string(6) "latin1"
    ["Value"]=>
    string(6) "latin1"
    }
    et SHOW VARIABLES LIKE 'collation%' donne :
    array(4) {
    [0]=>
    string(20) "collation_connection"
    ["Variable_name"]=>
    string(20) "collation_connection"
    [1]=>
    string(17) "latin1_swedish_ci"
    ["Value"]=>
    string(17) "latin1_swedish_ci"
    }
    J'ai change le character set de la table mais rien n'y fait. Avec la console Mysql, quand j'affiche les élements de ma table, les accents sont toujours mal interprétés...

    Je ne comprends pas pourquoi ici l'insertion plante, quand j'ajoute d'autres textes dans d'autres tables, les accents sont bien interprétés...

    Merci à vous

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Le problème semble donc provenir de ton script, pas de la table. Cela dit, pourquoi choisir swedish plutôt que latin ?
    Peut-être qu'en utilisant set_locale() en début de script, tu pourras contourner le problème ?

  11. #11
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Citation Envoyé par Yogui
    Le problème semble donc provenir de ton script, pas de la table.
    C'est ce que je pense, puisque la seule différence avec le reste de mes codes c'est que la chaine (ici équilibré), est ajoutée à la table par l'intermédiaire javascript (AJAX). Pourtant, juste avant l'insertion, le mot est bien accentué... Je ne vois pas d'où ça vient.
    Il faudrait peut être que j'essai sans AJAX.

  12. #12
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Après vérification la seule chose qui plante, c'est bien le fait de passer mes éléments par AJAX...
    Au clique d'un bouton, un script javascript récupère la contenance du champ, la transmet au script php qui traite l'info.

    Et la ça plante, ça vient donc du javascript.
    Quelqu'un connaitrait le remède ?

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Hop, le sujet est déplacé dans Javascript puisque la BDD et PHP ont été mis hors de cause.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Utf-8
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par SpaceFrog
    Utf-8
    +1, il faut penser à faire un utf8_encode avant le echo ()
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  16. #16
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    On va peut être en revenir au php

    Sinon le utf8_encode ne change rien, et le ut8_decode remplace les caractères par ?

    La possibilité serait que je remplace manuellement tous les faux caractères, mais c'est un peu fastidieux... Le mieux serait une vraie fonction.

    Sinon SpaceFrog quand tu disais Utf-8 tu entendais ces fonctions?

  17. #17
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Sinon, tu peux t'amuser à faire du url_decode(url_encode($str)), pour voir si ca marche ou pas

    Essaie différentes combinaisons pour tester...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  18. #18
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Explique-moi voir comment tu peux appliquer des fonctions PHP avec une interface utilisateur ?
    Si le problème vient de la transmission par AJAX, alors il faut trouver l'équivalent de utf8_encode() en Javascript.
    Pour le moment, tes informations semble être encodées avec un encodage invalide avant d'être transmises à PHP. C'est donc avant PHP qu'il faut intervenir.

  19. #19
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Il n'y aurait pas une histoire de charset sur la page la dessous ?


    -------- edit.
    En faits pas vraiment la page. Mais plutot sur le flux XML envoyé par Ajax. Je ne sais plus comment cela fonctionne précisèment mais il faudrait peut être regarder sur le content-encoding du flux.

  20. #20
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    j'entendais le doctype et une bazlise meta contense charset ...
    je ne l'ai pas là sous le coude je suis en congés mais j'ai ça au boulot ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SQL] caractère accentués transformés en é
    Par guian dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 20/08/2008, 11h54
  2. execution requete sql caractère spéciaux
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/02/2008, 17h04
  3. SQL et caractères spéciaux
    Par winx69 dans le forum SGBD
    Réponses: 3
    Dernier message: 29/07/2005, 14h00
  4. [SQL Server] problème de caractères spéciaux
    Par mbibim63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/06/2005, 18h38
  5. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38

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