Вернуться   Форумы Якутск Онлайн > Hi-Tech > Сисадмины и программисты > Веб-дизайн
Ответ
 
Опции темы Опции просмотра

Проблемы с кодировками
Старый 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
  Ответить с цитированием

Старый 11.03.2010, 15:30   #2
rohard
Постоялец
 
Аватар для rohard
 
rohard вне форума
Регистрация: 19.01.2009
Адрес: На восток от Солнца, на запад от Луны.
Сообщений: 1,120
rohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутациюrohard имеет наиславнейшую репутацию
Отправить сообщение для rohard с помощью ICQ
По умолчанию

man iconv
__________________
Почти.
  Ответить с цитированием

Старый 11.03.2010, 18:47   #3
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 имеет наиславнейшую репутацию
По умолчанию

Смысл как раз и в том, чтобы везде кодировка была utf-8 и не надо было прибегать к перекодировке данных.
  Ответить с цитированием

Старый 22.03.2010, 17:43   #4
Strelockk
Участник
 
Аватар для Strelockk
 
Strelockk вне форума
Регистрация: 15.11.2008
Сообщений: 238
Strelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутациюStrelockk имеет наиславнейшую репутацию
По умолчанию

Обхожусь "Сравнением" в phpmyadmin, браузеру отдаю хидеры с нужной кодировкой, SET NAMES вообще редко пользуюсь, т.к. общесистемная кодировка utf-8 мало приходится прибегать к конвертированию.
  Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +9, время: 18:30.


vBulletin skin developed by: eXtremepixels
Powered by vBulletin® Version 3.6.3
Copyright ©2000 - 2024, Якутск-Online. Перевод: zCarot