Показать сообщение отдельно

Проблемы с кодировками
Старый 11.03.2010, 15:09   #1
Regis Filius
SuperVisor TF2
 
Regis Filius вне форума
Регистрация: 21.06.2008
Сообщений: 623
Regis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутациюRegis Filius имеет наиславнейшую репутацию
По умолчанию Проблемы с кодировками

Не совсем веб-дизайн, но касается.

Обычно я использовал windows-1251 и в своих PHP скриптах без особого труда вручную переводил в utf-8 данные в базу данных и из неё, пока не задумался: "А почему бы не перейти совсем на utf-8 и избавиться от мороки с базой данных?". Сказано - сделано, и следующей кодировкой для небольшой сайта стал именно utf-8

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

Для начала простая функция перекодирования строк в PHP:
PHP код:
iconv("желаемая кодировка""предыдущая кодировка""что переводится."); 
Например, следующая функция перекодирует данные в utf-8:
PHP код:
iconv("utf-8""windows-1251""ПОПЯЧСО!!!!!"); 

В целом кодировки следует прописывать в нескольких местах:
1. HTML код.
2. PHP код.
3. База данных (в моем случае MySQL).
4. Кодировка самих скриптов (у меня были .php для php скриптов и .js для javascript).


HTML
Кодировка прописывается в мета-тэгах:
PHP код:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
PHP
Отправляется в заголовках функцией header (заголовки всегда отправляются в самом начале)
PHP код:
header('Content-type: text/html; charset=utf-8'); 
В дополнении к этому можно ещё добавить:
PHP код:
if (!setlocale(LC_CTYPE ,"ru_RU.UTF-8"))
setlocale(LC_CTYPE,"ru_RU"); 

MySQL
В базе данных достаточно много настроек, где указывается кодировка, возможно, что я что-то и упустил, но мне хватило следующего:
- Изменение кодировки самой базы данных, таблицы и кодировки сравнения (collation). Всё это легко изменяется с помощью phpMyAdmin.
- Запрос (query) "SET NAMES UTF8", лучше всего сделать это сразу после подключения.
Не забывайте, что в SQL кодировки пишутся немного по-другому.

Скрипты
В любом уважающем себя текстовом редакторе (у меня NotePad++) есть функция перекодирования содержимого, которой надо не забывать время от времени пользоваться. Сам лично маялся довольно долго, пока не догадался перевести все файлы в utf-8.

Естественно, что таким образом можно поставить не только utf-8
  Ответить с цитированием