Кодировка сайта: 4 столпа мудрости.

Фанат

oncle terrible
Команда форума
Кодировка сайта: 4 столпа мудрости.

Большое количество вопросов по кодировкам, не имеющих отношения к БД, побудило меня составить небольшое сводное руководство по данному вопросу.
Итак, кодировка нашего сайта складывается из 4 пунктов:
1. Кодировка базы данных.
* Задается при создании таблиц.
* Может быть любая. Должна отражать реальную кодировку данных в таблице.
* Например, если данные у нас будут лежать в кодировке Windows-1251, то создавая таблицу, пишем CREATE TABLE chartest (string text) DEFAULT CHARSET=cp1251;
* Проверить текущую кодировку таблицы можно запросом SHOW CREATE TABLE tablename

2. Кодировка клиента БД (клиентом в данном случае является скрипт, работающий с БД).
* Задается сразу после соединения с БД, запросом SET NAMES кодировка
* Должна совпадать с кодировкой страницы.
* Например, если страница у нас в utf-8, то в PHP пишем mysql_query("SET NAMES utf8");
* Проверить можно запросом show variables like '%char%'; (переменные character_set_client, character_set_connection и character_set_results должны иметь установленное нами значение)

3. Кодировка страницы.
* Задается HTTP заголовком "Content-type". Задать его можно в настройках PHP или веб-сервера, а так же напрямую в коде.
* Должна соответствовать кодировке данных на странице.
* Например, если страница у нас в utf-8, то в PHP напишем header("Content-Type: text/html; charset=UTF-8");
* Проверить можно, выбрав в браузере пункт меню Вид - кодировка. Так же полезно посмотреть, какую кодировку шлет сервер в заголовке.

4. Кодировка данных на странице.
* Задается в редакторе.
* Должна соответствовать той кодировке, которую мы хотим.
* Особых рекомендаций здесь дать невозможно, но хотя бы минимальная компьютерная грамотность, чтобы выбрать в редакторе желаемую кодировку при сохранении, автору сайта необходима.

Примечание: Обозначения кодировок в mysql могут не совпадать с общепринятыми. Внимательно смотрите примеры.
Взято из http://phpfaq.ru/charset
 

Krishna

Продался Java
По п.3 замечание, что передавать кодировку в заголовке - плохой стиль. Её надо передавать в
Код:
<meta http-equiv="content-type" content="text/html; charset=XXX">
Причины - например сохранённая локально копия страницы будет открываться в нормальной кодировке.
 

Фанат

oncle terrible
Команда форума
C_TIGER, ну, это уже совсем другое. к отображению отношения не имеет. к работе функций.

Krishna, только не " плохой стиль. Её надо передавать", а "Все правильно, передавать в заголовке обязательно, а в качестве дополнения можно еще указать нестандартный тех для тех редких случаев, когда страницу сохранят на диск"
 

dr-sm

Новичок
Krishna, HTTP заголовок вроде как имеет приоритет над meta. по поводу локальной копии, нормальный браузер должен сам прописать кодировку при сохранении.
 

Фанат

oncle terrible
Команда форума
Косвенно много что имеет.
Но учитывая, что ЭТО - и так имеет косвенное отношение к статье, которая написана про то, как правильно писать SET NAMES, то на этом и остановимся.

а вот про хидер я, пожалуй, поправлю.
 

Фанат

oncle terrible
Команда форума
про отдельные столбцы (или отдельные базы, например) написано в основном тексте, про кодировку БД.
Здесь просто чеклист на тему "написал set names а все равно краказабрыыыы!!!"
 
Сверху