MySQL возвращает результат? (знак вопроса) вместо ... и т. д.

0

Когда я возвращаю строку из моей базы данных mySQL, я получаю? вместо некоторых символов, например: ò, à  и т.д. Моя строка и таблица mysql установлены на utf8_unicode_ci, поэтому я думаю, что база данных хранит ее правильно, но php не возвращает ее правильно.

Подумайте, что это имеет какое-то отношение к mysql_set_charset, но не может заставить его работать правильно. Любая помощь будет принята с благодарностью!

  <?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
    but cant get it to work properly. - что ты пробовал?
Теги:

4 ответа

10
Лучший ответ

"Думаю, что это имеет какое-то отношение к mysql_set_charset" - да, очень вероятно.

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

Для более подробной информации нам нужно узнать больше о функции queryDB() и связанных с ней вещах (например, когда установлено соединение с базой данных)

см. также:

  • 0
    Соединение было сохранено в другом файле, помещено в mysql_set_charset, и оно работало как сон! Ура!
  • 1
    выполнял это локально на php 5.2.6, и он работал нормально, но как только id развернул его на моем сервере, работающем на 5.1.6, он не работал. Однако я наткнулся на эту строку: mysql_query ('SET NAMES utf8'); который работал удовольствие!
5

попробуйте поместить это после 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
    Это, например, mysql_real_escape () в темноте об измененном кодировке. см. ilia.ws/archives/…, который, по-видимому, был написан до того, как mysql_set_charset был представлен в php 5.2.3
0

Отправить в качестве первого запроса:

SET NAMES 'utf8'

Должен работать;)

  • MySQL хранит текст правильно, а PHP правильно форматирует, но проблема заключается в кодировке соединения:)

  • Как и в случае с @VolkerK, может быть лучше использовать mysql_set_charset func

  • 0
    Это, например, mysql_real_escape () в темноте об измененном кодировке. docs.php.net/mysql_set_charset говорит: «Использование mysql_query () для выполнения SET NAMES .. не рекомендуется».
  • 0
    Я использую PDO, и это прекрасно работает :) Так что я написал, что это "должно работать" при использовании драйвера mysql / mysqli
Показать ещё 3 комментария
0

Правильно ли кодируется файл?

Вы пытались использовать utf8_encode или utf8_decode? см. http://php.net/manual/en/function.utf8-encode.php

Если utf8_encode работает, я бы предположил, что результаты из базы данных находятся в неправильной кодировке.

Если utf8_decode работает, я бы предположил, что файл имеет неправильную кодировку или, возможно, браузер разбирает ее в неправильной кодировке. Это может быть исправлено с заголовком:

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

или в <head> :

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню