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 :

[Tableaux] Encodage utf8 d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut [Tableaux] Encodage utf8 d'un tableau
    Bonjour,

    J'ai besoin de decoder le résultat d'une requete, je me suis dit faisons simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete=utf8_encode($requete);
    Bah, grand naïf que je suis, il semble ne pas aimer ce type d'opération sur un tableau.

    Alors, faisons une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($requete as $ligne)
    {
    foreach($ligne as $champ)
    {
    $champ=utf8_encode($champ);
    }
    }
    Ben oui, mais non, c'est $champ qui est encodé par $requete, il faudrait remettre champ dans ligne et ligne dans requete.

    Bon avant d'aller plus loin en fait, voici ma question, est-ce si compliqué que cela, ou existe-t-il une autre solution ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Pourrait tu nous donner la structure globale de ton tableau.

    Car il me semble que tu pourrais simplement faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($requete as ligne => $champ) {
         $champ = utf8_encode($champ);
    }
    NB : Selon la doc,
    utf8_encode -- Convertit une chaîne ISO-8859-1 en UTF-8
    Donc c'est normal qu'un tableau passé à utf8_encode retourne une erreur.

  3. #3
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Bonjour Yoshio,

    Merci, voici ma structure de tableau issue d'une requête

    J'ai le tableau $requete qui contient tous les enregistrements de ma table
    J'ai le tableau $ligne qui est un enregistrement du tableau $requete qui contient tous les champs de ma table et je dois encoder chaque champ.

    J'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($requete as $ligne => $champ) 
    {
         $champ = utf8_encode($champ);
    }
    et il me met le message suivant :

    Notice: Array to string conversion in ...sur la ligne 46
    La ligne 46 étant celle-ci "$champ = utf8_encode($champ);"

  4. #4
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    La variable $champ a l'air d'être un tableau. Fais un dump dessus pour voir ?

  5. #5
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Oui $champ est un tableau.

    Voici un enregistrement du tableau $requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => Array ( [id_champ_pub] => 4 [id_type_variable] => 1 [libelle] => Civilit� utilisateur [var_champ] => user_civilite [id_trt] => 1 ) [1] => Array ( [id_champ_pub] => 5 [id_type_variable] => 1 [libelle] => Nom utilisateur [var_champ] => user_nom [id_trt] => 1 ) [2] => Array ( [id_champ_pub] => 6 [id_type_variable] => 1 [libelle] => Pr�nom utilisateur [var_champ] => user_prenom [id_trt] => 1 ) [3] => Array ( [id_champ_pub] => 7 [id_type_variable] => 1 [libelle] => Initial Utilisateur [var_champ] => user_initial [id_trt] => 1 ) [4] => Array ( [id_champ_pub] => 8 [id_type_variable] => 1 [libelle] => Bureau utilisateur [var_champ] => user_bureau [id_trt] => 1 ) [5] => Array ( [id_champ_pub] => 9 [id_type_variable] => 1 [libelle] => Fonction utilisateur [var_champ] => user_fonction [id_trt] => 1 ) [6] => Array ( [id_champ_pub] => 10 [id_type_variable] => 1 [libelle] => Service utilisateur [var_champ] => user_service [id_trt] => 1 ) [7] => Array ( [id_champ_pub] => 11 [id_type_variable] => 1 [libelle] => Tel utilisateur [var_champ] => user_tel [id_trt] => 1 ) [8] => Array ( [id_champ_pub] => 12 [id_type_variable] => 1 [libelle] => Fax utilisateur [var_champ] => user_fax [id_trt] => 1 ) [9] => Array ( [id_champ_pub] => 13 [id_type_variable] => 1 [libelle] => GSM utilisateur [var_champ] => user_gsm [id_trt] => 1 ) [10] => Array ( [id_champ_pub] => 14 [id_type_variable] => 1 [libelle] => Mail utilisateur [var_champ] => user_mail [id_trt] => 1 ) )
    Voici un enregistrement du tableau $ligne issu de $requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => Array ( [id_champ_pub] => 4 [id_type_variable] => 1 [libelle] => Civilit� utilisateur [var_champ] => user_civilite [id_trt] => 1 ) [1]

  6. #6
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Oui c'est normal que tu ai cette erreur car je ne savais pas la structure de ta table.
    Pourrais tu refaire un var_dump() mais en l'entourant des balise <pre>. Ça sera beaucoup plus facile pour nous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    var_dump($requete);
    echo '</pre>';

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    voyons voyons...

    est-ce qu'on ne pourrais pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tab = array_map("methode1", $tab);
     
    function methode1($ligne) {
    return array_map("methode2", $ligne);
    }
     
    function methode2($element) {
    return utf8_encode($element);
    }
    on peut sans doute faire plus court avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $tab = array_map("methode1", $tab);
     
    function methode1($ligne) {
    return array_map("utf8_encode", $ligne);
    }
    voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab = array_map(create_function('$ligne', 'return array_map("utf8_encode", $ligne'), $tab);
    Par contre la derniere solution ne sera pas forcement optimisée, puisque la methode anonyme sera recrée a chaque appel (donc a chaque ligne)

    Je te laisse trouver des noms plus parlants pour methode1 et methode2, j'étais en panne d'inspiration ;o)

    http://fr2.php.net/manual/fr/functio...e-function.php
    http://fr2.php.net/fr/array_map

  8. #8
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Pardon, pour la présentation du tableau

    Le voici avec des <pre>

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    array(8) {
      [0]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "44"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(31) "Compte bancaire du destinataire"
        ["var_champ"]=>
        string(16) "dest_type_compte"
        ["id_trt"]=>
        string(1) "1"
      }
      [1]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "45"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(27) "Code banque du destinataire"
        ["var_champ"]=>
        string(16) "dest_code_banque"
        ["id_trt"]=>
        string(1) "1"
      }
      [2]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "46"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(28) "Code guichet du destinataire"
        ["var_champ"]=>
        string(17) "dest_code_guichet"
        ["id_trt"]=>
        string(1) "1"
      }
      [3]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "47"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(28) "N� de compte du destinataire"
        ["var_champ"]=>
        string(18) "dest_numero_compte"
        ["id_trt"]=>
        string(1) "1"
      }
      [4]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "48"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(23) "Cl� RIB du destinataire"
        ["var_champ"]=>
        string(12) "dest_cle_rib"
        ["id_trt"]=>
        string(1) "1"
      }
      [5]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "49"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(42) "Compte bancaire (hors RIB) du destinataire"
        ["var_champ"]=>
        string(20) "dest_compte_bancaire"
        ["id_trt"]=>
        string(1) "1"
      }
      [6]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "50"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(42) "Date d'ouverture de compte du destinataire"
        ["var_champ"]=>
        string(23) "dest_compte_date_ouvert"
        ["id_trt"]=>
        string(1) "1"
      }
      [7]=>
      array(5) {
        ["id_champ_pub"]=>
        string(2) "51"
        ["id_type_variable"]=>
        string(1) "7"
        ["libelle"]=>
        string(43) "Date de fermeture de compte du destinataire"
        ["var_champ"]=>
        string(23) "dest_compte_date_fermet"
        ["id_trt"]=>
        string(1) "1"
      }
    }

  9. #9
    Membre éprouvé Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Par défaut
    Merci flagnat,

    J'ai fait ceci en respectant ton inspiration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $requete = array_map("methode1", $requete);
    function methode1($ligne) {
    return array_map("methode2", $ligne);
    }
    function methode2($element) {
    return utf8_encode($element);
    }
    Et cela fonctionne très bien.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/02/2006, 11h04
  2. [Tableaux] Affichage valeur d'un tableau trié
    Par kcizth dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2006, 15h47
  3. Réponses: 1
    Dernier message: 24/12/2005, 14h18
  4. [Tableaux] function qui retourne un tableau
    Par toure32 dans le forum Langage
    Réponses: 1
    Dernier message: 21/12/2005, 21h16
  5. Réponses: 14
    Dernier message: 13/10/2005, 12h55

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