Есть несколько вещей, которые могут помочь. Во-первых, даже если вы устанавливаете кодировку UTF-8 в заголовке, этого может быть недостаточно. Я видел, как браузер игнорировал это раньше. Попробуйте заставить его, добавив это в голову вашего HTML:
<meta charset='utf-8'>
Далее, как уже упоминалось here, попробуйте сделать следующее:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
EDIT
Так что я только что сделал некоторые читают немного поиграть. Прежде всего позвольте мне сказать вам, несмотря на то, что я упомянул в комментариях, utf8_encode()
и utf8_decode()
вам не помогут. Это помогает понять кодировку UTF-8. Я нашел страницу Википедии на UTF-8 очень полезной. Предполагая, что значение, которое вы возвращаете из базы данных, на самом деле уже закодировано в кодировке UTF-8, и вы просто выгружаете его сразу после его получения, тогда все должно быть хорошо.
Если вы делаете что-либо с результатом базы данных (особенно с манипулированием строкой), и вы не используете функции поддержки unicode из библиотеки PHP mbstring, то это, вероятно, испортит ее, поскольку стандартные функции строки PHP не знают о unicode.
После того, как вы понимаете, как UTF-8 кодирование работает вы можете сделать что-то крутое, как это:
$test = "™";
for($i = 0; $i < strlen($test); $i++) {
echo sprintf("%b ", ord($test[$i]));
}
Какие дампов что-то вроде этого:
11100010 10000100 10100010
Это правильно закодированы в UTF-8 ' ™ '. Если у вас нет такого символа в ваших данных, полученных из базы данных, тогда что-то перепутано.
Чтобы проверить, попробуйте найти специальный символ, который вы знаете, в результате использования mb_strpos()
:
var_dump(mb_strpos($db_result, '™'));
Если возвращает ничего, кроме false
то данные из базы данных в порядке, в противном случае мы можем в по крайней мере, установить, что это проблема между PHP и базой данных.
Не относящийся к самому вопросу, но используйте 'mysqli' или PDO, а не расширение' mysql', которое устарело. – 2013-04-09 03:10:02
Вы уверены, что все, что находится в вашей базе данных, является utf8? –
[Обращение с Unicode Front To Back в веб-приложении] (http://kunststube.net/frontback/) – deceze