Когда я возвращаю строку из моей базы данных 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;
?>
"Думаю, что это имеет какое-то отношение к 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() и связанных с ней вещах (например, когда установлено соединение с базой данных)
см. также:
попробуйте поместить это после 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'" );
Отправить в качестве первого запроса:
SET NAMES 'utf8'
Должен работать;)
MySQL хранит текст правильно, а PHP правильно форматирует, но проблема заключается в кодировке соединения:)
Как и в случае с @VolkerK, может быть лучше использовать mysql_set_charset func
Правильно ли кодируется файл?
Вы пытались использовать 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
but cant get it to work properly.
- что ты пробовал?