Страница 1 из 1

Проблема с кодировкой.

Добавлено: 2009-01-26 18:32:21
dyatlovm
Друзья выручайте, бьюсь уже третий день на проблемой.
Есть вот такой вот продукт Owl Intranet Engine - система электронного хранения документов.
Система такая:

Код: Выделить всё

pkg_info | grep mysql
mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)

Код: Выделить всё

 cat /etc/my.cnf |grep char
default-character-set=cp1251
default-character-set=cp1251
Дамп базы был в комплекте.
Проблема в следующем, при попытке создать русскоязычную папку или файл выдает вопросы. Пытался следовать советам zg по статье http://www.lissyara.su/?id=1655 ничего не хорошего не получилось.
С кодировками имею дело в первый раз, так что сильно не пинайте.
Заранее благодарен.

Re: Проблема с кодировкой.

Добавлено: 2009-01-26 19:23:43
zg
dyatlovm писал(а):Дамп базы был в комплекте.
и в какой кодировке?

дай вывод

Код: Выделить всё

mysql -e'show variables like "char%"'
и грепни дамп на предмет установки кодировок

Код: Выделить всё

grep -i 'set names' dump.sql
ну и вывод какой-нить таблички выложи

Код: Выделить всё

mysql -e 'show create table `dbname`.`table`\G'

Re: Проблема с кодировкой.

Добавлено: 2009-01-26 19:41:21
thefree

Re: Проблема с кодировкой.

Добавлено: 2009-01-26 22:24:08
dyatlovm

Код: Выделить всё

 mysql -u root -p -e'show variables like "char%"'
Enter password:
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | cp1251                           |
| character_set_connection | cp1251                           |
| character_set_database   | cp1251                           |
| character_set_results    | cp1251                           |
| character_set_server     | cp1251                           |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
В дампе по умолчанию про кодировки не слова. Похоже что задаются системой при создании базы.

Код: Выделить всё

mysql> show create table `intranet`.`folders`\G
*************************** 1. row ***************************
       Table: folders
Create Table: CREATE TABLE `folders` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `parent` int(4) NOT NULL default '0',
  `description` text NOT NULL,
  `security` varchar(5) NOT NULL default '',
  `groupid` int(4) NOT NULL default '0',
  `creatorid` int(4) NOT NULL default '0',
  `password` varchar(50) NOT NULL default '',
  `smodified` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `folderid_index` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=cp1251
1 row in set (0.00 sec)
В настройках есть описание подключения к базе данных, но там опять таки не слова о кодировке. :cry:
Единственное где задается кодировка, это конфигурационный файл, но насколько я понимаю строка

Код: Выделить всё

$default->charset = "UTF-8";
отвечает за отображение страницы. Если не прав, извиняюсь :oops:

При настройке my.cnf

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
и залитии дампа по умолчанию при попытке создать что либо появляется
: Invalid SQL: SELECT * FROM folders WHERE name = 'ЊЅµ' and parent = '1'
: 1267 (Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=')
Session halted.

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 0:20:02
zg
dyatlovm писал(а):latin1_swedish_ci
гм.. не с неба же он её взял -))) где-то прописана

грепни скрипт на пердмет latin1

Код: Выделить всё

grep -ir latin1 /path/to/script/

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 7:38:33
dyatlovm
Просмотрел все скрипты, ни в одном из них ни слова о latin1 или о latin1_swedish_ci

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 13:24:29
Volodymyr
dyatlovm писал(а):Просмотрел все скрипты, ни в одном из них ни слова о latin1 или о latin1_swedish_ci
Єто дефолтовая кодировка с которой собирается Мускул если при сборке не задаьть опций. Можно попробовать задать кодировку при старте в конфиге. Ну или просто пересобрать с нужніми ключами. Я свой собираю так (мне надо utf8 для ороботы, его и указываю)

Код: Выделить всё

cd /usr/ports/databases/mysql51-server/ && make install WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_COLLATION=utf8_bin BUILD_OPTIMIZED=yes BUILD_STATIC=yes clean
Соотвецтвенно все что происходит по умолчанию или без параметров о кодировке происходив в utf8.

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 15:00:45
dyatlovm
Мне кажется что дефолтовые значения для сервера и клиента задаются вот так:

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
Только вот откуда взялось litin1? Вот в чем вопрос :)

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 17:25:07
zg
dyatlovm писал(а):Только вот откуда взялось litin1?
а что за скрипт юзаешь? можешь ссылку дать или исходники выложить?

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 17:30:33
dyatlovm
zg писал(а):
dyatlovm писал(а):Только вот откуда взялось litin1?
а что за скрипт юзаешь? можешь ссылку дать или исходники выложить?
Documents Managment System
http://sourceforge.net/projects/owl/ Owl 0.9x

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 20:03:50
Volodymyr
dyatlovm писал(а):Мне кажется что дефолтовые значения для сервера и клиента задаются вот так:

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
Только вот откуда взялось litin1? Вот в чем вопрос :)
Извени, а где в этом примере задаются кодировки?

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 20:22:57
dyatlovm
Volodymyr писал(а):
dyatlovm писал(а):Мне кажется что дефолтовые значения для сервера и клиента задаются вот так:

Код: Выделить всё

mysql-client-4.1.22_1 Multithreaded SQL database (client)
mysql-server-4.1.22_1 Multithreaded SQL database (server)
Только вот откуда взялось litin1? Вот в чем вопрос :)
Извени, а где в этом примере задаются кодировки?
Блин, запарился. Вот что я хотел привести

Код: Выделить всё

cat /etc/my.cnf |grep char
default-character-set=cp1251
default-character-set=cp1251
Первое для клиента, второе для сервера.

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 21:22:55
zg
dyatlovm писал(а):Documents Managment System
гм.. муть какая -)))

сковырнул из db_mysql.inc

Код: Выделить всё

    @mysql_query("SET NAMES 'utf8';", $this->Link_ID);
    @mysql_query("SET CHARACTER SET 'utf8';", $this->Link_ID);
скрипт работает в UTF-8...

гм.. попробовал добавить кактлог - русские буквы игнорируются, в дескрипшин идут вопросики. Это скрипт кривой, а не кодировки виноваты. Ща посмотрю, где собака порылась -)))

Re: Проблема с кодировкой.

Добавлено: 2009-01-27 21:59:10
zg
:ROFL: весёлые ребята пишут этот проект

Код: Выделить всё

      $name = trim(fOwl_ereg_replace("[^$default->list_of_valid_chars_in_file_names]", "", fOwl_ereg_replace("%20|^-", "_", $name)));
короче это не скрипт а решето из костылей

при выключенных кавычках скрипт работать не будет, поэтому шестой пхп ему не светит.

С utf-8 его продружить можно, но костыли, которые они понаставили нервов попортят.

Re: Проблема с кодировкой.

Добавлено: 2009-01-28 12:15:07
dyatlovm
шестой пхп и мне не светит))
а вот к 5 хотелось бы прикрутить, я мало что понимаю в пхп, только сейчас начинаю разбираться
Спасибо за ответы, буду думать дальше, если получится, то может и статейка накатаю, может кого заинтересует.
Погуглил по вопросу хранения эл. документов и выдачи юзерам их, нашел только англоязычные проекты, ни один из опробованных мной не поддерживает cp1251, остановился на этом, решил довести до конца дело.
Еще раз спасибо!

Re: Проблема с кодировкой.

Добавлено: 2009-01-28 15:04:51
zg
dyatlovm писал(а):решил довести до конца дело.
этот проект туп как пробка, а делали его люди, которые не понимают вообще ничего из области безопасного программирования.

Найденные мой проблемы:
1. Проект сделан с претензией на xhtml, но заголовок передаёт через http-equiv, из-за этого браузер выставляет кодировку по умолчанию - обычно latin1 (cp1252). Из-за этого данные вносятся в базу чёрти как.
2. Проект не использует настройку локалей
3. Проект не умеет работать со строками в UTF-8, нужно переделывать все функции на проверку валидности вводимых пользователем данных.

Первую проблему я решил путём удаления из файла lib/header.inc строки с эквивом и раскомментировал фнукцию по отвправке заголовка

Код: Выделить всё

header("Content-Type: text/html;charset=$default->charset");
Вторая проблема решается через установку локали в файле config/owl.php (в начало файла добавить):

Код: Выделить всё

setlocale(LC_ALL, 'Russian_Russia.65001', 'ru_RU.UTF-8');
Третья проблема решается через кол, который нужно вбить авторам этого скрипта.

Re: Проблема с кодировкой.

Добавлено: 2009-01-28 16:14:34
dyatlovm
zg огромное спасибо за помощь в толковании данной проблемы, наверное буду искать более приемлемый вариант решения моей задачи.

Re: Проблема с кодировкой.

Добавлено: 2009-01-28 16:32:00
zg
-))) если что, пиши -))) поможем чем сможем