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

  1. #1
    Candidat au Club
    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
    Points : 4
    Points
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta connexion mysql et ton fichier .php doivent être en UTF8.

  3. #3
    Candidat au Club
    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
    Points : 4
    Points
    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
    Points : 44 155
    Points
    44 155
    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.

  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
    Points : 3 295
    Points
    3 295
    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
    Candidat au Club
    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
    Points : 4
    Points
    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