Многоязычный форум

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
russianspy
phpBB 1.0.0
Сообщения: 6
Стаж: 20 лет 1 месяц

Многоязычный форум

Сообщение russianspy »

русский, словацкий, английский.
настроил все установленные на форуме языки на cp1251, изменил все файлы для словацкого в чтобы диакритика была в виде &#nnn; чтобы словацкая навигация по форуму нормально отображалась в cp1251. вобщем, всё выглядит ничтяк. даже в сообщениях словацкая диакритика просматриваеться корректно.

проблема: в названиях тем и именах пользователей диакритика превращается в &#nnn;

как бы мне вылечить эту беду?
спасибо
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 21 год 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

russianspy
То есть проблема только в заголовках тем?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
russianspy
phpBB 1.0.0
Сообщения: 6
Стаж: 20 лет 1 месяц

Сообщение russianspy »

да, была в заголовках тем и именах пользователей. для заголовков я кажется нашел решение: в functions_post.php > prepare_post функции сразу после строки $subject = htmlspecialchars(trim($subject)); и добавил $subject = eregi_replace( "&", "&", $subject); чтобы она не перекодировала & в &амп; (точнее чтобы обратно только & перекодировала) перед тем как отправить в базу данных. и вроде нормально работает (правда я конечно не знаю сломал ли я этим что-нибудь :) )

но для имен пользователей я не знаю где это сделать. полагаю можно что-нить подобное провернуть при регистрации, сразу перед отправкой в БД, но я не могу найти где. с этим нужна помощь
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 21 год 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

functions.php

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

// added at phpBB 2.0.11 to properly format the username
function phpbb_clean_username($username)
{
	$username = substr(htmlspecialchars(str_replace("\'", "'", trim($username))), 0, 25);
	$username = phpbb_rtrim($username, "\\");
	$username = str_replace("'", "\'", $username);

	return $username;
}
Вот здесь.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
russianspy
phpBB 1.0.0
Сообщения: 6
Стаж: 20 лет 1 месяц

Сообщение russianspy »

спасибо! я попробовал вставить $username = eregi_replace( "&", "&", $username); после первой строки функции и работает... но частично :(

проблема в том что он обрезает кол-во символов (даже если убрать substr(__, 0, 25), наверно "обрезание" происходит ещё где-то. правда если убрать всё равно символов остаётся).

например если я укажу имя ľščťžýáíéň, уже при входе в функцию у меня будет & #318;& #353;& #269;& #357;& #382;& #253;& #225;& #237;& #233;& #328; (без пробелов) - т.е. не 10 символов как ввёл, а 60. плюс, если оставить функцию как есть, все & поменяються на & т.е. + 40 символов .. в общем думаю проблема понятна.

как можно посчитать по шаблону например сколько с строке &#nnn; , и потом подогнать вс под 25 "реальных" букв? или лучше как-то по другому это сделать?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 21 год 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

Проверка есть еще здесь:
includes/functions_validate.php

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

function validate_username($username)
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
russianspy
phpBB 1.0.0
Сообщения: 6
Стаж: 20 лет 1 месяц

Сообщение russianspy »

гм, в базе данных phpBB на имя пользователя выделенно 25 символов, , т.ч. то что я хочу не получиться. придётся извращаться серьёзно, либо вообще диакритику запрещать :(

окзалось, что при регистрации имена "портились" в usercp_register.php в следующем коде:

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

	// Strip all tags from data ... may p**s some people off, bah, strip_tags is
	// doing the job but can still break HTML output ... have no choice, have
	// to use htmlspecialchars ... be prepared to be moaned at.
	while( list($var, $param) = @each($strip_var_list) )
	{
		if ( !empty($HTTP_POST_VARS[$param]) )
		{
			$$var = eregi_replace( "&", "&", (trim(htmlspecialchars($HTTP_POST_VARS[$param]))));			
		}
	}
без eregi_replace( "&", "&", ()), это уже я добавил себе. а при посте незарегеным юзером в functions.php , как ты и сказал. а в validate_username() ничего плохого не происходило.

в общем над этим мне ещё надо подумать, что мне делать. но есть ещё одна проблема. при предв. просмотре при написании ЛС, опять же используя диакритику в теме и/или теле сообщения, после нажатия "Предв. просмотр" диакритика в полях редактирования появляется как и была напечатана (нормально). а при пред. просмотре при написании поста в форум диакритика возвращается как $#nnn;
russianspy
phpBB 1.0.0
Сообщения: 6
Стаж: 20 лет 1 месяц

Сообщение russianspy »

Xpert спасибо за помощь. ты единственный пытавшийся мне помочь из 4х форумов на которых я задавал вопросы. не знаю, либо вопросы сложные, либо тон вопросов не тот, либо ещё чё ... как бы там ни было, я за несколько дней листания скрипты phpBB как-то даже начал понимать чё к чему, благо php выглядит довольно интуитивно. уже в стольких местах успел повставлять свою заплатку - eregi_replace() что аж страшно :)

ваще у меня такое впечатление, что я заново изобретаю колесо.. нигде не могу найти моды или инфу по моей теме, но что-то мало вериться что я первый с такой темой столкнулся. или я просто по какому-то неправильному пути пошёл в моём решении проблемы :?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 21 год 2 месяца
Поблагодарили: 2 раза

Сообщение Xpert »

Я думаю лучше в данном случае пользоваться str_replace - она больше подходит для такой замены, получим выигрыш в скорости.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
MchlP
phpBB 1.4.1
Сообщения: 48
Стаж: 19 лет 9 месяцев

Сообщение MchlP »

russianspy
Проблема решена?
Если еще нет, попробуй так:
файл:
includes/usercp_register.php
найди:

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

	$strip_var_list = array('username' => 'username', 'confirm_code' => 'confirm_code', 'email' => 'email', 'icq' => 'icq', 'aim' => 'aim', 'msn' => 'msn', 'yim' => 'yim', 'website' => 'website', 'location' => 'location', 'occupation' => 'occupation', 'interests' => 'interests');
замени на:

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

	$strip_var_list = array('confirm_code' => 'confirm_code', 'email' => 'email', 'icq' => 'icq', 'aim' => 'aim', 'msn' => 'msn', 'yim' => 'yim', 'website' => 'website', 'location' => 'location', 'occupation' => 'occupation', 'interests' => 'interests');
	$username = (!empty($HTTP_POST_VARS['username'])) ? str_replace('&', '&', trim(htmlspecialchars($HTTP_POST_VARS['username']))) : '';
файл:
includes/functions.php
найди:

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

	$username = substr(htmlspecialchars(str_replace("\'", "'", trim($username))), 0, 25);

замени на:

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

	$username = substr(str_replace('&', '&', htmlspecialchars(str_replace("\'", "'", trim($username)))), 0, 25);
Должно работать. Потестировать надо.

Добавлено спустя 1 час 20 минут 2 секунды:

...не 10 символов как ввёл, а 60.
Касательно этого, самое простое решение - увеличить размер полей username в БД (до 64, например), подрезать не 25, а 64 символа (соответственно), ну и в *.tpl файлах изменить maxlength на побольше. IMHO, ес-но.
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 20 лет
Откуда: Архангельск

Сообщение Гога »

russianspy писал(а):русский, словацкий, английский.
настроил все установленные на форуме языки на cp1251
Я бы сделал UTF-8...
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
tester
phpBB 1.0.0
Сообщения: 2
Стаж: 19 лет 6 месяцев

Сообщение tester »

Всем здравствуйте :)
У меня похожая проблема, поэтому если автор топика не сильно будет возражать, я задам свой вопрос здесь.
В локале поставил версию голый, без модов phpbb 2.0.18, базу создал в utf8_general_ci т,к, на форуме будет 3 языка - рус фр анг и для правильного отображения фр букв с акцентами выбрал именно utf-8 по дефолту,(с другими кодировкаму возникали затруднения) . Все очень хорошо отображается кроме двух строчных русских букв
:shock: "c" "я" вместо них двойные знаки вопроса. С заглавными такой проблемы нет Что делать? где искать?
Заранее благодарен всем за помощь :)
Вот для наглядности скрин
<начало картинки>
Изображение
<fin картинки>

Вернуться в «Поддержка phpBB 2.0.x»