Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.
UTF-8 и русский язык
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
UTF-8 и русский язык
По этой проблеме создано уже много тем, но сколько я их не читал, решения проблемы пока не вижу.
Сначала опишу ситуацию.
На сайте используется кодировка Utf-8 (как я понимаю, это из-за того, что она используется на сервере). Хостер сайта - я, на своем сервере apach. Адрес - http://www.hr-outsourcing.com.ua/hr-outlook/forum
В базе данных - не знаю, как определить какая кодировка, но в PhpMyAdmin в разедел переменных - character set - latin1.
Устанавливаю форум PhpBB 2.017, что касается английского - все нормально. Но как только переключаюсь на русский - окно браузера пустое. Меняю кодировку браузера с UTF-8 на Win-1251, все появляется, как только перехожу на другую страницу - снова все пусто.
Далее - добавил одно русское сообщение. Оно не отображается нормально ни при каких раскладах. Если же выставить кодировку Utf-8 в браузере, то название темы выглядит частично нормально, частично - нечитаемо, а все интерфейсные сообщения вообще нераспознаваемый набор символов.
Пробовал менять language_main.php с windows-1251 на utf-8 и ru-utf-8, пробовал добавлять код, который выкладывали на форуме, не помогает. Что нужно сделать в такой ситуации?
Хотелось бы, чтобы в ответе прояснили смысл всех действий, а не только дали инструкции по исправлению. Спасибо.
Сначала опишу ситуацию.
На сайте используется кодировка Utf-8 (как я понимаю, это из-за того, что она используется на сервере). Хостер сайта - я, на своем сервере apach. Адрес - http://www.hr-outsourcing.com.ua/hr-outlook/forum
В базе данных - не знаю, как определить какая кодировка, но в PhpMyAdmin в разедел переменных - character set - latin1.
Устанавливаю форум PhpBB 2.017, что касается английского - все нормально. Но как только переключаюсь на русский - окно браузера пустое. Меняю кодировку браузера с UTF-8 на Win-1251, все появляется, как только перехожу на другую страницу - снова все пусто.
Далее - добавил одно русское сообщение. Оно не отображается нормально ни при каких раскладах. Если же выставить кодировку Utf-8 в браузере, то название темы выглядит частично нормально, частично - нечитаемо, а все интерфейсные сообщения вообще нераспознаваемый набор символов.
Пробовал менять language_main.php с windows-1251 на utf-8 и ru-utf-8, пробовал добавлять код, который выкладывали на форуме, не помогает. Что нужно сделать в такой ситуации?
Хотелось бы, чтобы в ответе прояснили смысл всех действий, а не только дали инструкции по исправлению. Спасибо.
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
перед инсталляцией надо создать базу для форума с default charset=utf8 и collation=utf8_general_ci из того же phpmyadmin
крайне рекомендую версию mysql новее 4.1.14
также очень рекомендую php переставить на свежий из ветки 4.x.x
в php.ini или настройках прописать mbstring.overload 6 (именно 6, иначе может некоректно отправляться почта) если этого не сделать - будет урезать вдвое все русские названия тем.
некоторые изменения в коде придётся сделать для корректной отправки email (особенно Subj) в кодировке UTF
крайне рекомендую версию mysql новее 4.1.14
также очень рекомендую php переставить на свежий из ветки 4.x.x
в php.ini или настройках прописать mbstring.overload 6 (именно 6, иначе может некоректно отправляться почта) если этого не сделать - будет урезать вдвое все русские названия тем.
некоторые изменения в коде придётся сделать для корректной отправки email (особенно Subj) в кодировке UTF
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
Спасибо большое за советы, они очень кстати, как раз столкнулся с проблемой обрезания русских тем. Только не помогает почему, то прописал в php.ini mbstring.func_overload = 6, но сообщения по прежнему обрезаются, даже после переустановки форума. "или в настройках" - это значит, что можно прописать где-то еще? а можно еще подробнее узнать про изменения в коде, которые нужно сделать для работы почты?Дятелл писал(а):перед инсталляцией надо создать базу для форума с default charset=utf8 и collation=utf8_general_ci из того же phpmyadmin
крайне рекомендую версию mysql новее 4.1.14
также очень рекомендую php переставить на свежий из ветки 4.x.x
в php.ini или настройках прописать mbstring.overload 6 (именно 6, иначе может некоректно отправляться почта) если этого не сделать - будет урезать вдвое все русские названия тем.
некоторые изменения в коде придётся сделать для корректной отправки email (особенно Subj) в кодировке UTF
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
обрезать может и база данных - если в ней однобайтовая кодировка так и осталась стоять.
кроме mbstring.overload для корректной работы с UTF надо и остальные mbstring параметры выставить. у меня были проблемы со "старыми" версиями php - сейчас стоит 4.4.1 вроде всё нормально.
с mail надо поискать, уже забыл где что делал :-)
вкратце -
в emailer.php
найти
заменить на
это не совсем по RFC но работает - спокойно проскакивают русские буквы в subj
такую штуку надо делать обязательно для русскоязычныйх форумов в любой кодировке! отправка некодированного subj приводит к многочисленным глюкам с почтой! мне вот кстати с этого форума всё кубиками приходит :-)
та же процедура в groupcp.php
везде в шаблонах для писем прописал
Charset: utf-8
тот же чарсет указал везде в конфигах, шаблонах и т.п.
кроме mbstring.overload для корректной работы с UTF надо и остальные mbstring параметры выставить. у меня были проблемы со "старыми" версиями php - сейчас стоит 4.4.1 вроде всё нормально.
с mail надо поискать, уже забыл где что делал :-)
вкратце -
в emailer.php
найти
Код: Выделить всё
$this->subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
Код: Выделить всё
$this->subject = '=?UTF-8?B?'.base64_encode(trim(preg_replace('#[\n\r]+#s', '', $subject)))."?=\n";
такую штуку надо делать обязательно для русскоязычныйх форумов в любой кодировке! отправка некодированного subj приводит к многочисленным глюкам с почтой! мне вот кстати с этого форума всё кубиками приходит :-)
та же процедура в groupcp.php
везде в шаблонах для писем прописал
Charset: utf-8
тот же чарсет указал везде в конфигах, шаблонах и т.п.
-
- phpBB 1.0.0
- Сообщения: 8
- Стаж: 18 лет 8 месяцев
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
Код: Выделить всё
<?php
//ini_set("memory_limit","200M");
//error_reporting (E_ALL ^ E_NOTICE);
encoder("./htdocs.win");
function encoder($path_to) {
echo"$path_to/\n";
if ( is_dir($path_to) ) {
if ($handle = opendir($path_to) ) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$path = "$path_to/$file";
echo "$path/\n";
encoder("$path_to/$file");
}
}
closedir($handle);
} else {
return;
}
} elseif ( is_file($path_to) && preg_match("/.*\.txt$/",$path_to) ) {
$content = file_get_contents("$path_to");
if (preg_match("/charset\=/i",$content)==1 ) {
$content = preg_replace("/charset\=windows-1251/i","charset=utf-8",$content);
echo"*";
}
$content = iconv("WINDOWS-1251","UTF-8",$content);
$path=preg_replace("/^\.\/htdocs\.win(.*)$/","./htdocs.utf$1",$path_to);
$fp = fopen ("$path", "w");
if (!$fp) { echo "Unable to open remote file for writing."; exit; }
fputs ( $fp,$content);
fclose($fp);
$content='';
echo "$path\n";
return ;
} else { return 0; }
return ;
}
?>
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
Перекодировал с помощью редактора Macromedia HomeSite 5, там есть такая возможность. Хотя один файл, lang_main.php упорно не хотел им перекодироваться, происходило усечение всего файла кроме последних нескольких строчек, пришлось использовать простой NotePad из стандартных в Windows 2000 (сохранить как - там есть выбор кодировки).danilevsky писал(а):каким способом ты перекодировал эти файлы?mainsan писал(а):Проблема в определенной степени решена - требовалось просто перекодировать все файлы форума из Win в UTF-8
2Дятелл
Спасибо за помощь.
Обрезание заголовков тем проиходило по вине базы данных, сменил тип поля заголовка (где менять посмотрел в статье http://www.phpbbguru.net/docs/?id=13 на сайте) на Text, все нормализовалось.
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
-
- phpBB 2.0.2
- Сообщения: 306
- Стаж: 19 лет 9 месяцев
mainsan
читайте здесь - http://faq.dklab.ru/denwer?v=tla#h30-32
сам себе хостер - значит сам себе хозяин, что захотел, то и поставил
читайте здесь - http://faq.dklab.ru/denwer?v=tla#h30-32
надо. надо - самому стараться вникать.mainsan писал(а):Хостер сайта - я
сам себе хостер - значит сам себе хозяин, что захотел, то и поставил
-
- phpBB 1.0.0
- Сообщения: 8
- Стаж: 18 лет 8 месяцев
Вот возникала проблема:Дятелл писал(а):обрезать может и база данных - если в ней однобайтовая кодировка так и осталась стоять.
Файлы форума и базу данных перевел в utf-8
Например на phpBB максимальная длинна ника 25 символов (в таблице phpbb_users, username равно varchar(25))
так вот когда сохраняешь ник на русском языке длинной в 25 символов он обрезается потому как в базе данных юникоде один нелатинский символ считается как за два.
Решил, что решение проблемы изменить в базе данных длинну всех текстовых полей умножив значение на два. (тесть было: varchar(25) стало: varchar(50)) тогда все сохраняется нормально.
Но может есть какой еще вариант решения этой проблемы более правильный?
Добавлено спустя 20 минут 31 секунду:
И вот еще что творится.
Регистрирую пользователя, ник которого на русском. Регистрация проходит нормально.
Регистрирую второго, тоже на русском - но выдает, что такой пользователь уже зарегестрирован.
Проделываю тоже самое, только ник пользователя на английском - все регестрируется.
Что за прикол?
Добавлено спустя 19 минут 49 секунд:
Вот что обнаружил:
phpBB стал обьявлять что пользователи уже существуют после того как поставил следующий код:
Код: Выделить всё
mysql_query("SET NAMES utf8");
Данилевский
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
надо проверить:
если ник обрезается ещё в PHP ДО зписи в базу - не настроены параметры mbstring.overload в php.ini
если режет сама база - значит таки не настроено использование collation для таблиц азы
в общем, очень советую почитать документацию к mysql и php в части поддержки многобойтных кодировок.
да, и собствеено чем вы пользуетесь при работе с базой? если phpmyadmin - то я вас поздравляю, он от юникода просто балдеет местами, как раз и показывая всякие ДанилевÑ�кий
для phpmyadmin mbstring.overload надо отключить.
P.S. php 4.4.10 и mysql 4.1.18 заведомо работают с юникодом. если у вас не работает - значит что-то не так настроено :-)
если ник обрезается ещё в PHP ДО зписи в базу - не настроены параметры mbstring.overload в php.ini
если режет сама база - значит таки не настроено использование collation для таблиц азы
в общем, очень советую почитать документацию к mysql и php в части поддержки многобойтных кодировок.
да, и собствеено чем вы пользуетесь при работе с базой? если phpmyadmin - то я вас поздравляю, он от юникода просто балдеет местами, как раз и показывая всякие ДанилевÑ�кий
для phpmyadmin mbstring.overload надо отключить.
P.S. php 4.4.10 и mysql 4.1.18 заведомо работают с юникодом. если у вас не работает - значит что-то не так настроено :-)
-
- phpBB 1.0.0
- Сообщения: 8
- Стаж: 18 лет 8 месяцев
режит сама база. установил varchar в два раза больше и все заработало. А что ты имеешь в виду под настройкой collation?Дятелл писал(а):если режет сама база - значит таки не настроено использование collation для таблиц азы
вот так создавал базу:
Код: Выделить всё
CREATE DATABASE `ukrarab` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
да я пользуюсь phpmyadmin. он так именно символы и показывает, но если вставить после соедниения с базой mysql_query("SET NAMES utf8"); он начинает нормально символы показывать? Как это можна обьяснить?Дятелл писал(а):да, и собствеено чем вы пользуетесь при работе с базой? если phpmyadmin - то я вас поздравляю, он от юникода просто балдеет местами, как раз и показывая всякие ДанилевÑ�кий
для phpmyadmin mbstring.overload надо отключить.
-
- phpBB 1.0.0
- Сообщения: 7
- Стаж: 18 лет 8 месяцев
надо смотреть настройки my.cnf - какая кодировка стоит по умолчанию для client
в остально трудно советовать - у меня сервер с нативно установленной UTF (Slackware) и все компоненты (мускуль, пхп, апач) пересобраны из исходников с нужными мне настройками.
при старте скрипта полезно делать setlocale(LC_ALL,"ru_RU.UTF-8")
и setlocale(LC_NUMERIC,"en_US")
да и вообще системную локаль надо привести в соответствие
в остально трудно советовать - у меня сервер с нативно установленной UTF (Slackware) и все компоненты (мускуль, пхп, апач) пересобраны из исходников с нужными мне настройками.
при старте скрипта полезно делать setlocale(LC_ALL,"ru_RU.UTF-8")
и setlocale(LC_NUMERIC,"en_US")
да и вообще системную локаль надо привести в соответствие
-
- phpBB 1.0.0
- Сообщения: 8
- Стаж: 18 лет 8 месяцев
Я убит. Не знаю как решит этот вопрос.
Поставил форум на хостинг FreeBSD, Apache 1.33, php4.3, MySQL 4.1
Базу данных перевел в utf-8. Все работает ок, только ники обрезаются вполовину, но уже не базой, а самим php. (проверил это путем увеличения поля для ника в базе данных).
Прописал в htaccess следующее:
php_value mbstring.func_overload 6
теперь при регистрации пользователя с русским ником мне выдает что пользователь такой есть.
Я уже замучался... Что делать?
Поставил форум на хостинг FreeBSD, Apache 1.33, php4.3, MySQL 4.1
Базу данных перевел в utf-8. Все работает ок, только ники обрезаются вполовину, но уже не базой, а самим php. (проверил это путем увеличения поля для ника в базе данных).
Прописал в htaccess следующее:
php_value mbstring.func_overload 6
теперь при регистрации пользователя с русским ником мне выдает что пользователь такой есть.
Я уже замучался... Что делать?