Intellect Board — cистема управления сайтом

Построение сайта на основе форума

Intellect Board — cистема управления сайтом »   Архив технической поддержки IntB до версии 2.15 »   Решение проблемы с кодировкой на PHP 5 и MySQL
RSS

Решение проблемы с кодировкой на PHP 5 и MySQL

Для тех, у кого форум установлен на localhost

Текущий рейтинг темы: 4.0000
Выводить сообщения
Правила раздела

<<Назад  Вперед>>Страницы: 1 2
Модераторы: aerograf, wsx
Печать
 
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Уже несколько раз пользователи, установившие форум на localhost с PHP 5 сообщали мне об ошибке с кодировками, когда все данные из БД выводятся в виде знаков вопроса. Как выяснилось, эта проблема - результат недоработки MySQL-клиента, встроенного PHP 5, в котором жестко задан charset для подключения к БД (то ли latin1, то ли utf8) и не предусмотрено средств для его переопределения.
Проблема решается следующим образом: необходимо открыть файл index.php (расположенный в корне форума) и там после
if ($DBpersist) $link=db_pconnect($DBhost,$DBusername,$DBpassword);
else $link=db_connect($DBhost,$DBusername,$DBpassword);
db_select_db($DBname,$link);

дописать вот такой код:
if ($DBdriver=="mysql") {
  $sql = "SET NAMES 'cp1251'";
  db_query($sql,$link);
}

При необходимости вместо cp1251 можно указать другую кодировку.
Аналогичные действия нужно проделать и с admin/index.php

Оффтопик: В релиз я эту возможность включать не буду, так как рано или поздно в PHP сделают средства решения этой проблемы более корректно, а предложенное исправление выполняет 1 лишний SQL-запрос, что создает дополнительную нагрузку на БД

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
Gram
Администратор

Gram
Откуда: Нижний Новгород
Всего сообщений: 1011
Рейтинг пользователя: 38


Ссылка


Дата регистрации на форуме:
23 июля 2003
XXXX Pro, я помню мы с сисадмином с этой кодировкой потрахались долго, пока форумы не почитали...
eugrus
Участник Проекта

eugrus
Всего сообщений: 420
Рейтинг пользователя: 5


Ссылка


Дата регистрации на форуме:
14 мар. 2005
XXXX Pro
Как на счёт utf8 версии intb?

---
Russian UNIX Forums
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
Вполне реально сделать (правда, непонятно - оно вообще кому-нибдь надо?).
Тут есть два варианта: 1) сделать базу данных в UTF-8, а выводить в броузер - как обычно, в cp1251, 2) перевести на UTF-8 вообще все (и выложить это дело либо как дополнительный язык - Russian UTF-8) , либо собрать отдельный дистрибутив, где будет только UTF-8.
Кстати, попытки второго частично уже предпринимались (см. тему про татарские символы), но к чему они привели - не знаю.

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001
И еще: в UTF-8 непонятно, какую сортировку (collation) следует ставить, чтобы строки с русскими буквами сортировались корректно. Я перепробовал все, и корректная сортировка получалась только с utf8_binary, но при этом заглавные и строчные буквы различаются (что есть очень нежелательно)

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
eugrus
Участник Проекта

eugrus
Всего сообщений: 420
Рейтинг пользователя: 5


Ссылка


Дата регистрации на форуме:
14 мар. 2005

XXXX Pro написал:
[q]

Проблема решается следующим образом: необходимо открыть файл index.php (расположенный в корне форума) и там после

if ($DBpersist) $link=db_pconnect($DBhost,$DBusername,$DBpassword);
else $link=db_connect($DBhost,$DBusername,$DBpassword);
db_select_db($DBname,$link);

дописать вот такой код:

if ($DBdriver=="mysql") {
$sql = "SET NAMES 'cp1251'";
db_query($sql,$link);
}
[/q]


В IntB 2.13 это вызвало такую ошибку:

GLOBAL FORUM ERROR: SET NAMES 'cp1251'<br>1064: You have an error in your SQL syntax near 'NAMES 'cp1251'' at line 1

---
Russian UNIX Forums
eugrus
Участник Проекта

eugrus
Всего сообщений: 420
Рейтинг пользователя: 5


Ссылка


Дата регистрации на форуме:
14 мар. 2005

XXXX Pro написал:
[q]
2) перевести на UTF-8 вообще все (и выложить это дело либо как дополнительный язык - Russian UTF-8)
[/q]


Угу, я об этом.

---
Russian UNIX Forums
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3299
Рейтинг пользователя: 70


Ссылка


Дата регистрации на форуме:
29 сен. 2001

eugrus написал:
[q]
В IntB 2.13 это вызвало такую ошибку:
[/q]

Тут дело не в версии IntB, а в версии MySQL, скорее всего. По-моему, до 4.1 вместо SET NAMES надо писать что-то еще (но сейчас точно не помню, что именно).

---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно!
Destiny
Новичок


Всего сообщений: 2
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
16 мая 2006
Помогите пожалуйста.
Ошибка вот такая.

GLOBAL FORUM ERROR: SET NAMES 'cp1251'<br>1064: You have an error in your SQL syntax near 'NAMES 'cp1251'' at line 1

Версия мускуля 3.23.58
Версия PHP 4.3.10
Форум очень понравился хотелось бы его использовать.
wsx
Модератор форума

wsx
Всего сообщений: 256
Рейтинг пользователя: 12

Репутация пользователя: 2

Ссылка


Дата регистрации на форуме:
14 янв. 2005
Destiny, в первом посте сказано, что это проблема PHP5, а не ``Версия PHP 4.3.10``.



Так что вот это:

if ($DBdriver=="mysql") {
  $sql = "SET NAMES 'cp1251'";
  db_query($sql,$link);
}


не нужно...

---
Не всё так просто, как на самом деле!
<<Назад  Вперед>>Страницы: 1 2
Модераторы: aerograf, wsx
Печать
Intellect Board — cистема управления сайтом »   Архив технической поддержки IntB до версии 2.15 »   Решение проблемы с кодировкой на PHP 5 и MySQL
RSS

1 посетитель просмотрел эту тему за последние 10 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
Ограничение доступа
не отображаются разделы
Архив версий
Установка стиля на Intellect Board 2.22
Завершилась работа над новой версией 3.00

Самые активные 5 тем RSS


Время выполнения скрипта: 0.0946. Количество выполненных запросов: 17, время выполнения запросов 0.0000
Creative Commons License Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru Valid HTML 4.01 Transitional Valid CSS!