Решение извечной проблемы с кодировками в сайтостроении

Приветствую тебя, уважаемый читатель. Речь пойдёт, как уже понятно из названия, о кодировках в . Не смотря на то, что на эту тему уже написано тонны текстовых материалов, все же проблема остаётся и продолжает иметь место.

Итак давайте всё разберём по полочкам. Обычно после этого все неприятности к кодировками пропадают сами собой. Сразу скажу, что рекомендую все составляющие вашего web приводить к единому знаменателю, т.е. к одной единой кодировке и лучше всего для этого сегодня подходит utf-8.

Ок, начинаем. Что нужно проверить, что бы выставить все кодировки. Ну во первых все файлы вашего сайта должны быть приведены к utf-8. Т.е. просто берём и открываем файлы сайта каким-нибудь текстовым редактором вроде notepad++ и выставляем кодирование в UTF-8 без BOM.

Теперь проверяем настройки сервера web сервера. Для Apache (файл httpd.conf) директива с указанием кодировки выглядит так:

AddDefaultCharset utf-8

Так же кодировку конкретно для каждой папки можно указать в файле .htaccess, при этом синтаксис такой же.

Так же можно указать явно кодировку через php отдавая нужные заголовки:

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

Не забывайте, что в самом HTML коде каждой страницы сайта так же должна быть явно указана кодировка:

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

или так:

<meta charset="UTF-8">

Теперь перейдём к настройке кодировок СУБД MySQL. Для начала посмотрите на вашу базу данных и таблицы. В каких они кодировках? Желательно, что бы всё было в utf-8 или подобных.

Однако это ещё не всё. Многие упускают этот важный момент и потом не понимают почему у них вместо нормального текста отображаются кракозябры на сайте. Обратите особое внимание на кодировку соединения с самой базой данных. У каждой БД в MySQL можно установить свою кодировку соединения. Её можно посмотреть например через phpMyAdmin на вкладке «Операции», там будет такой раздел с названием «Сравнение» (если разбираться подробно то, это не совсем кодировка, но сейчас не об этом) думаю вы уже догадались, что там так же должно стоять, что то родное с utf-8. Однако это сравнения соединения с базой по умолчанию. В своём скрипте вы можете явно указать сравнение для текущего соединения следующим образом:

mysql_query('SET NAMES utf8');

Т.е. сразу после получения дескриптора соединения с базой делаем этот sql запрос специфичный именно для СУБД MySQL. Очень полезно когда пишите собственную CMS.

Теперь вы можете быть уверены, что у вас всё в порядке.

Поделиться!
Tags: , , , , , ,

49.69MB | MySQL:52 | 0,301sec