РЕШЕНО: Неправильное сокращение тем сообщений

Автор Простой, 08 мая 2009, 15:26:55

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Простой

Найдено половинчатое решение, смотри ниже

После перехода на юникод, обновления на 2.0RC1 всё работает супер! Все баги починены. Но вот не порядок, на главной, где видны последние сообщения творится тихий ужас:

Привет ми�...

и т.д.

Т.е. сокращается текст как-то не правильно.
Что делать?

Заранее благодарю за все советы, или ссылки, где тема уже расскрывалась.


Простой



Простой

Спасибо, это решило проблему с календарём, но решит ли её с сокращением тем? Ведь там юникод, никогда не узнаешь, сколько байтов там обрезать, длина слов же разная.


Простой

Subs-BoardIndex.php, line 236

$row_board['short_subject'] = shorten_subject($row_board['subject'], 24);

Вот здесь собака порылась, конечно, можно увеличить или уменьшить кол-во байтов, но как я писал выше: одни слова будут сокращаться нормально, другие нет :(

Что говорят официальные власти?

+ upd: о функции shorten_subject()

Простой

И ещё, вот тут на официальном форуме:
http://www.simplemachines.org/community/index.php?topic=302468.0
но там похоже всё в тупик зашло


Простой

digger, а тогда кто-нибудь ужерешил эту проблему?


Простой



Простой

Благодарю!

Приложил файл. (вообще это html, я расширение на txt поменял)

Простой

 uglystupid

Найдено половинное решение, это конечно не дало мне понять в чём моя проблема, но по крайней мере последствия устранило:

В файле Sources/Subs.php:

было:

	
if (
$smcFunc['strlen']($subject) <= $len)
	
	
return 
$subject;

	
// Shorten it by the length it was too long, and strip off junk from the end.
	
return 
$smcFunc['substr']($subject0$len) . '...';

стало:

	
if (
mb_strlen($subject'utf-8') <= $len)
	
	
return 
$subject;

	
// Shorten it by the length it was too long, and strip off junk from the end.
	
return 
mb_substr($subject0$len'utf-8') . '...';


:coolsmiley:

Спасибо всем, кто откликался.

digger®

Цитата: Простой от 08 мая 2009, 21:24:15
uglystupid

Найдено половинное решение, это конечно не дало мне понять в чём моя проблема, но по крайней мере последствия устранило:

Не будет работать если php собран без mbstring.

И я бы советовал покопать в сторону Load.php, где задаются функции $smcFunc['strlen'] и $smcFunc['substr']. Мне кажется что у вас preg_replace() и preg_split() не понимают модификатор "u".

З.Ы. У вас еще и php4 вдобавок.

Простой

Тут мне ещё советовали вообще прописать оверлоад функций, чтобы при вызове stlen/substr и вызывались их mb-аналоге. Пишу сюда, может кому пригодится. Я-то не знаю, как это сделать :)

digger®

Цитата: Простой от 11 мая 2009, 09:52:00
Тут мне ещё советовали вообще прописать оверлоад функций, чтобы при вызове stlen/substr и вызывались их mb-аналоге. Пишу сюда, может кому пригодится. Я-то не знаю, как это сделать :)

Если вы не планируете использовать какую-то другую кодировку, кроме внутренней, установленной по умолчанию, то существует специальный параметр в php.ini, позволяющий сберечь много часов работы и использовать ваши готовые сценарии (скрипты), не отвлекаясь на многобайтовые строки. Он называется mbstring.func_overload, и его действие заключается в простом конвертировании существующих функций, таких как strtoupper() и mail(), в их многобайтовые аналоги. Когда этот параметр задействован, вы можете использовать strtoupper() также как и обычно, а PHP динамически подставит и выполнит функцию mb_convert_case(), используя установленную по умолчанию кодировку. Параметр mbstring.func_overload представляет собой битовое поле, которое вы можете установить в одно из следующих положений:
0 — отключить поддержку; использовать однобайтовые функции.
1 — использовать подстановку для mail()
2 — использовать подстановку для всех функций str*().
4 — использовать подстановку для всех функций ereg*().

Вы можете также указать комбинацию режимов, просто сложив указанные числа. Например, значение 3 заставляет использовать подстановки для функции mail() и всех функции str*(), а значение 6 указывает на необходимость использования подстановок для всех str*() и всех ereg*() функций, но оставляет неизменной функцию mail(). Для конвертирования всех функций необходимо использовать значение 7. Многие параметры PHP могут быть установлены для определенной директории при помощи файлов .htaccess, но это не рекомендуется при использовании опции mbstring.func_overload. Как утверждают разработчики, это приводит к нестабильности. Указывайте этот параметр в файле php.ini и не трогайте его.