Drupal 4.6 PHP5+MySQL 4.1.X проблемы с локализацией

Главные вкладки

Аватар пользователя Ubnormal Ubnormal 18 мая 2005 в 22:30

Ситуация следующая решил поглядеть что за зверь такой друпал, уж очень сказки про него понравились Smile Имеем САБЖ, в MySQL 4.1 все таблички друпала имеют collate=utf8_general_ci. После установки локализации, которая выложена здесь на сайте, всё работает, НО есть одно большое НО - буковки "с" и "я"(русские) показываются козявками. Похожий глюк пожизни встречал при запросах к MySQL 4.1. без предварительного запроса "SET NAMES utf8;" Попробовал вылечить друпал от этой беды: залез в includes/database.mysql.inc и прописал этот запрос в функции db_connect:

Получилось следующее:

function db_connect($url) {
  $url = parse_url($url);

  // Allow for non-standard MySQL port.
  if (isset($url['port'])) {
     $url['host'] = $url['host'] .':'. $url['port'];
  }

  $connection = mysql_connect($url['host'], $url['user'], $url['pass'], TRUE) or die(mysql_error());
  mysql_select_db(substr($url['path'], 1)) or die('unable to select database');
       
 [user=mysql_query]mysql_query[/user]('SET NAMES utf8;',$connection); //Добавлено мной
  return $connection;
}

После чего он ВООБЩЕ перестал работать, осыпав меня туевой хучей ошибок:

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 331.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 331.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 334.

warning: Cannot modify header information - headers already sent by (output started at /var/www/drupal.net/includes/common.inc:384) in /var/www/drupal.net/includes/common.inc on line 204.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 380.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 380.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 383.

warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /var/www/drupal.net/includes/menu.inc on line 389.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

warning: array_keys() [function.array-keys]: The first argument should be an array in /var/www/drupal.net/includes/menu.inc on line 916.

warning: Wrong parameter count for min() in /var/www/drupal.net/includes/menu.inc on line 916.

Есть подозрение что с юникодом в друпале всё хорошо лишь на поверхности, т.е. фактически он не держит мультибайтные строки. Я прав?

Комментарии

Аватар пользователя Ubnormal Ubnormal 18 мая 2005 в 22:42

Дело в том что когда инсталлил друпал в коде еще не было моей строчки "SET NAMES utf8;" Дропнул базу, создал заново но уже с использованием модифицированного кода - всё заработало. Всем спасибо Smile

--
Если в кране нет воды,
Виноваты в том винды.

Аватар пользователя sokrat sokrat 28 июля 2005 в 18:01

а cron.php в таком варианте патча работает? У меня что не получается после запуска этого файла найти русские слова в материалах сайта
в чём проблема?

Аватар пользователя Nick Nick 18 мая 2005 в 22:59

1. Убери @ из начала строки.
2. Все таки imho правильнее
mysql_query("set charset utf8");
Впрочем, попробуйте и так и так.

Видите, поддержку кодировок в mysql добавили только в mysql 4.1.x (и, судя по всему, проблем от этого гораздо больше, чем удобств), поэтому прописать эту строку, значит отрубить более ранние версии. А ведь еще и 3.x встречаются.

--
USU-Lug http://usu-lug.org.ru

Аватар пользователя Ubnormal_гость Ubnormal_гость (не проверено) 19 мая 2005 в 11:04

1) Привычка. Более того, на работоспособности скрипта это никак не скажется.
2) Сделал я так потому что читаю мануалы по MySQL 4.1 им виднее как правильнее Smile

Аватар пользователя qman qman 19 мая 2005 в 6:23

Я так и не понял, требуется модифицирование исходников drupal 4.6, чтобы использовать русскую локаль?

Аватар пользователя Ubnormal_гость Ubnormal_гость (не проверено) 19 мая 2005 в 11:01

Да в случае если у тебя MySQL 4.1 при соединении необходимо устанавливать кодировку в которой будут передаваться/получаться данные.