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 :

[Système] Formatage des accents


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Par défaut [Système] Formatage des accents
    Bonjour !

    j'ai un petit probleme! Je compte sur votre aide pour pouvoir m'aider a le résoudre !

    Voila, j'ai une application en PHP/Mysql et un annuaire LDAP situé sur un serveur.
    Je souhaite récupérer les données de l'annuaire pour pouvoir alimenter une table "utilisateurs" de ma base MySql.
    Chose que je réussi a faire !
    Seul probleme les accents et autre caractères spéciaux ! voici mon code :

    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
    for ($i=0; $i<$info["count"]; $i++) 
    { 
     
    if($info[$i]["initials"][0] <> 'NONE') 
    { 
     
    $Trigramme =strtr(''.$info[$i]["initials"][0].'','ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy') ; 
    $Nom=strtr(''.$info[$i]["sn"][0].'','ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
    $Prenom=strtr(''.$info[$i]["givenname"][0].'','ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy') ; 
     
    echo $Prenom ; 
    echo "<BR>"; 
     
     
    $req='replace utilisateurs (TRIGRAMME, NOM, PRENOM) VALUES (\''.$Trigramme.'\', \''.$Nom.'\', \''.$Prenom.'\')'; 
     
    mysql_query($req) or die(mysql_error()); 
     
    } 
     
    } 
    if (mysql_query($req)) 
    { 
    echo 'Mise a jour effectué'; 
    } 
     
    echo 'Fermeture de la connexion'; 
     
    ldap_close($ldapconn); 
     
    mysql_close(); 
    } 
    ?>

    J'ai fait un echo des prénoms avant de les mettres dans la base de données, et il ne m'écrit pas correctement tous les prénoms !
    Par exemple au lieu de "Grégory "il me met "GrA©gory". Je ne comprend pas car dans mon code je lui dit de remplacer les accents !

    merci de votre aide !

  2. #2
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Ah, les joies de l'utf8... que c'est beau.

    Alors ce qui est fourbe avec l'ut8, c'est que si a un quelconque moment tu te foire d'encodage, au final, t'as un résultat foireux. Donc, faut que tu maitrises l'intégralité de la "chaine" d'encodage. A savoir :
    Dans ton annuaire ldap, quel est l'encodage ?
    Dans ta base, quel est l'encodage ?
    Quand tu affiche le contenu de ta base, quel est l'encodage ?

    En gros, tu affiches ton prénom qui foire juste après l'avoir récuperer du ldap. Et la, soit il est écrit correctement, soit pas..
    S'il ne l'est pas, tu va lui appliquer la fonction utf8_encode, voire utf8_decode (t'essaie les deux) et tu vois. Avec un peu de bol, une des versions va s'afficher correctement. Et tu mets ta version "correcte" dans la base.

    Fait attention, il est également possible que tu enregistre correctement dans ta base, mais que tu la lise en étant en iso par exemple, ce qui de donne l'impression que c'est foiré.

    La question a se poser c'est de savoir si tu veux être en iso (auquel cas, tu vas principalement décoder), ou si tu veux être en utf8 (auquel cas tu va principalement encode).

    Voila ;-)

    --
    Rakken

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Le test suivant est faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($info[$i]["initials"][0] <> 'NONE')
    L'opérateur logique différent n'existe pas sous la forme <> (SQL ?), en PHP il s'agit de != voir !== si le type de la variable intervient.

    Ensuite, la concaténation sur le premier paramètre de strstr est strictement inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtr(''.$info[$i]["initials"][0].'',
    A remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtr($info[$i]["initials"][0],
    Revenons à la question maintenant : pourquoi il n'y a pas transformation des caractères accentués ? Parce que je pense qu'il faut appliquer utf8_decode avant d'utiliser la fonction strstr, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Nom=strtr(utf8_decode($info[$i]["sn"][0]),'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    Notez que les chaînes LDAP utilisent l'encodage UTF-8 et qu'il vous est tout à fait possible d'utiliser celui-ci avec MySQL (version 4.0 et supérieure si je ne m'abuse).


    Julp.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Citation Envoyé par Rakken
    Ah, les joies de l'utf8... que c'est beau.

    --
    Rakken
    Personnellement j'encode et décode avec du htmlentities en encodant aussi les guillemets simple et doubles comme ca j'ai jamais à me préoccuper des addslashes qui peuvent gêner par la suite
    question de goût !

Discussions similaires

  1. [XML] encodage des accents
    Par matonfire dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 05/05/2004, 15h48
  2. Réponses: 5
    Dernier message: 08/03/2004, 10h28
  3. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 16h37
  4. formatage des requêtes sous psql
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2004, 11h10
  5. Réponses: 11
    Dernier message: 16/12/2003, 19h58

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