Отсутствие корректного вывода текста на странице, любые проблемы с кодировками, могут быть вызваны двумя причинами, которые несложно различить:
1. текст на странице знаками вопроса: некорректная кодировка выборки данных из базы.
2. текст на странице иероглифами: некорректная выдача кодировки страницы.
Есть пара пограничных случаев, но они редко встречаются, и с ними проще - если один вариант исправления не подошел - используйте второй.
Исправление (примеры взяты из MMfPM):
Текст из базы на странице выдается знаками вопроса.
1. Ищем в коде где у нас подключение к базе и выбор базы. Строки подобные:
Цитата:
@mysql_connect($db_host, $db_username, $db_password, $newlink);
|
или
Цитата:
@mysql_select_db($db_name, $this->link_id);
|
Естественно, в разных системах эти строки могут различаться. Основное их различие - в способе вызова коннекта, сам коннект всегда присутствует.
2. Между ними, или после них вставляете подобную же конструкцию:
Цитата:
@mysql_query("SET NAMES 'utf8'");
|
(обратите внимание на кавычки).
Помните, что "конец строки" в рнр обозначается точкой с запятой (";")
Если там это уже стоит - значит меняем utf8 на cp1251.
Объясняю:
Кодировка вашей базы данных может отличаться от кодировки написаной в скрипте, либо используемой по умолчанию. Запрос
(обратите внимание на кавычки) ставит нужную вам кодировку принудительно.
Текст на странице выдается иероглифами.
Для исправления должны ОБЯЗАТЕЛЬНО быть выполнены следующие три условия:
1.
Браузеру должен выдаваться верный заголовок:
вверху страницы, в теге <head> должен стоять мета-тег
Код:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
(или Windows-1251).
Для примера - откройте код этой страницы форума.
2.
Сервер должен отдавать верный заголовок:
в конфиге Апача, либо в файле .htaccess в корневой директории сайта, должна быть строка
Код:
AddDefaultCharset UTF-8
(или Windows-1251).
3.
Код самой страницы должен быть в соответствующей кодировке.
Если страница в ANSI кодировке, а сервер хочет отобразить ее в UTF-8 - получатся иероглифы.
Третий пункт в php легко и просто правится одной строкой:
Код:
header("Content-Type: text/html; charset=UTF-8");
Таким образом страница в ANSI кодировке отдается браузеру с указанием "выводить ее в UTF-8".