2010-08-23 5 views
0

Lorsque je retourne une ligne de ma base de données mySQL, je reçois un? au lieu de quelques caractères, par exemple: ò, à etc. Ma ligne et ma table mysql sont définies sur utf8_unicode_ci, donc je pense que la base de données la stocke correctement mais php ne la retourne pas correctement.Résultat mysql renvoie? (Point d'interrogation) au lieu de Ö etc

Pensez que cela a quelque chose à voir avec mysql_set_charset mais je n'arrive pas à le faire fonctionner correctement. Toute aide serait grandement appréciée !!

<?php 
if($row = mysql_fetch_assoc(queryDb("SELECT * FROM customer WHERE uuid='".$_COOKIE['uuid']."'"))) 
{ 
    $first_name = $row['first_name']; 
    $last_name = $row['last_name']; 
    $gender = $row['gender']; 


    $ileach_first_name = $row['ileach_first']; 
    $ileach_last_name = $row['ileach_last']; 

} 

//If Ileach Name is blank 

    if($ileach_last_name == "" || $ileach_first_name == ""){ 


    // Get ileach last name 
    $row = mysql_fetch_assoc(queryDb("SELECT * FROM ileach_last_names WHERE eng_name='$last_name'")); 

    $ileach_last_name = $row['gae_name']; 


    if($ileach_last_name == "") { 
    $row = mysql_fetch_assoc(queryDb("SELECT * FROM ileach_last_names order by rand() limit 1")); 
    $ileach_last_name = $row['gae_name'];} 



    //Get ileach First Name 
    //If Male 
    if($gender == 'M') { 

    $row = mysql_fetch_assoc(queryDb("SELECT * FROM ileach_first_names_m WHERE eng_name='$first_name'")); 

    $ileach_first_name = $row['gae_name']; 

    //If no name is selected, get one randomly 
     if($ileach_first_name == "") { 
     $row = mysql_fetch_assoc(queryDb("SELECT * FROM ileach_first_names_m order by rand() limit 1")); 
    $ileach_first_name = $row['gae_name']; } 
    } 
    //If Female 


    else{ 

    $row = mysql_fetch_assoc(queryDb("SELECT * FROM ileach_first_names_f WHERE eng_name='$first_name'")); 

    $ileach_first_name = $row['gae_name']; 

    //If no name is selected, get one randomly 
    if($ileach_first_name == "") { 
     $row = mysql_fetch_assoc(queryDb("SELECT * FROM ileach_first_names_f order by rand() limit 1")); 
    $ileach_first_name = $row['gae_name'];} 
    } 




    //Save ileach name into db 

    mysql_query("UPDATE customer SET ileach_first = '$ileach_first_name' 
    WHERE uuid='".$_COOKIE['uuid']."' "); 

    mysql_query("UPDATE customer SET ileach_last = '$ileach_last_name' 
    WHERE uuid='".$_COOKIE['uuid']."' "); 
    } 


    //Stitch name together. 

    $full_ileach_name .=$ileach_first_name; 
    $full_ileach_name .= " "; 
    $full_ileach_name .= $ileach_last_name; 





?> 
+0

'mais ne peux pas l'obtenir pour travailler properly.' - qu'est-ce que vous essayez ? –

Répondre

10

"Pensez qu'il a quelque chose à voir avec mysql_set_charset" - Oui, très probablement.

$mysql = mysql_connect(...); // TODO: error handling 
mysql_select_db('...', $mysql); // TODO: error handling 
mysql_set_charset('utf8', $mysql); // TODO: error handling 

Pour mor informations détaillées que nous devons en savoir plus sur la fonction queryDB() et d'autres choses connexes (comme par exemple, lorsque la connexion de base de données est établie)

voir aussi:

+0

La connexion a été stockée dans un autre fichier, fendue dans mysql_set_charset et cela a fonctionné comme un rêve! À votre santé! –

+0

fonctionnait en local sur php 5.2.6, et ça a bien fonctionné, mais une fois que id l'a déployé sur mon serveur en 5.1.6, ça n'a pas fonctionné. Cependant, j'ai trébuché sur cette ligne: \t mysql_query ('SET NAMES utf8'); qui a travaillé un régal! –

5

essayer de mettre cela après mysql_select_db:

mysql_query ("set character_set_client='utf8'"); 
mysql_query ("set character_set_results='utf8'"); 
mysql_query ("set collation_connection='utf8_unicode_ci'"); 
+0

Ceci est par exemple mysql_real_escape() dans le noir à propos du jeu de caractères modifié. voir http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html qui a apparemment été écrit avant mysql_set_charset a été introduit dans php 5.2.3 – VolkerK

0

Envoyer comme une première requête ceci:

SET NAMES 'utf8' 

devrait fonctionner;)

  • MySQL texte stocke correctement et PHP formatage correctement, mais le problème est la pose dans le cadre charset :)

  • Comme @VolkerK suggéré, il peut être une meilleure idée d'utiliser mysql_set_charset func

+0

Ceci est par exemple mysql_real_escape() dans le noir à propos du jeu de caractères modifié. http://docs.php.net/mysql_set_charset dit: "Utiliser mysql_query() pour exécuter SET NAMES .. n'est pas recommandé." – VolkerK

+0

J'utilise PDO et cela fonctionne très bien :) J'ai donc écrit que cela devrait fonctionner avec mysql/mysqli driver – canni

+0

Mais vous utilisez probablement aussi des requêtes paramétrées avec PDO, n'est-ce pas? – VolkerK

0

L'encodage du fichier est-il correct?

Avez-vous essayé d'utiliser utf8_encode ou utf8_decode? voir: http://php.net/manual/en/function.utf8-encode.php

Si utf8_encode fonctionne, je suppose que les résultats de la base de données sont dans le mauvais charset.

Si utf8_decode fonctionne, je suppose que le fichier a un charset incorrect ou que le navigateur l'analyse dans le mauvais jeu de caractères. Cela peut être fixé avec un en-tête:

header('Content-Type: text/html; charset=utf-8'); 

ou < tête >:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

voir: http://tlt.its.psu.edu/suggestions/international/web/tips/declare.html

Questions connexes