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 :

les caractères accentués renvoient une valeur "null" dans un tableau array [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut les caractères accentués renvoient une valeur "null" dans un tableau array
    Bonjour,

    J'ai un fichier "especes.php" qui contient le code ci-dessous. Ce fichier doit servir pour un menu d'autocomplétion (autocomplete avec jquery ui). J'ai un champ de noms vernaculaires en français (NOM_VERN) dans ma base qui contient des caractères accentués. Pour chaque nom d'espèce qui contient un caractère accentué é è à ê etc... la variable correspondante ($row_array['abbrev'] ) sort "null" comme résultat. Les noms sans caractère accentué sortent bien. Comment modifier mon code pour afficher les noms avec des caractères accentués ?
    Merci

    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
     <?php
    /* Connection vars here for example only. Consider a more secure method. */
    $dbhost = 'localhost';
    $dbuser = 'XXXXXX';
    $dbpass = 'XXXXXXXXX';
    $dbname = 'derogations';
     
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
    mysql_select_db($dbname);
     
    $return_arr = array();
     
    /* If connection to database, run sql statement. */
    if ($conn)
    {
    $fetch = mysql_query("SELECT `CD_NOM`,`NOM_COMPLET`,`NOM_VERN`,`NOM_VALIDE`  FROM `inpn_taxref_v4_copy` WHERE `FAMILLE` = 'asteraceae' 
    	AND `NOM_COMPLET` like '%" . mysql_real_escape_string($_GET['term']) . "%'"); 
    /* Retrieve and store in array the results of the query.*/
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['id'] = $row['CD_NOM'];
        $row_array['value'] = $row['NOM_COMPLET'];
        $row_array['abbrev'] = $row['NOM_VERN'];
    	$row_array['valide'] = $row['NOM_VALIDE'];
        array_push($return_arr,$row_array);
    }
    }
    /* Free connection resources. */
    mysql_close($conn);
    /* Toss back results as json encoded array. */
    echo json_encode($return_arr);
     
    ?>

  2. #2
    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
    Ta connexion mysql et ton fichier .php doivent être en UTF8.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut
    Merci Vincent,

    ma base et ma table sont bien codées en UTF8 et collation UTF8_general_ci

    j'ai donc ajouté ceci en haut de mon code php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    mb_internal_encoding('UTF-8');
    header('Content-Type: text/html; charset=UTF-8');
    mais çà n'a rien changé.
    En cherchant un peu sur le net, j'ai vu qu'il était conseillé d'ajouter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_set_charset('utf8');
    tout de suite après l'instruction de connexion à la base.

    Là il y a du mieux ! les noms sortent bien mais par exemple Cirse épineux sort comme çà :
    Cirse \u00e9pineux

    Suis-je prêt du but ?

  4. #4
    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
    \u00e9 c'est la conversion JSON de ton accent.

    Je pense que tu n'as pas besoin de cette conversion JSON d'ailleurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    selon la version de php et mysql la connexion entre les 2 est par défaut en iso (latin1)

    abandonne le connecteur mysql pour mysqli ou pdo vu que celui n'est plus maintenu dans php pour se connecter à mysql

    faut lire la doc de json_encode: par défaut, il échappe les caractères Unicode, tu dois donc utiliser JSON_UNESCAPED_UNICODE si tu veux éviter ça, si ta version de php le permet...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Par défaut
    Super,

    j'ai donc modifier la dernier ligne comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo json_encode ($return_arr, JSON_UNESCAPED_UNICODE);
    et çà marche !

    Merci

    Olivier

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 19/06/2015, 15h14
  2. Réponses: 1
    Dernier message: 09/04/2010, 18h22
  3. [RegEx] remplacer tous les caractères accentués d'une chaine
    Par Alexdezark dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2009, 12h47

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