Проблема с кодировкой (Добро пожало�...)

Автор Mmka, 06 февраля 2009, 15:16:53

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

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

Mmka

Установил. Все вроде на русском.

Но в окончании любой темы на главной форума - последняя буква в ккрякозяблах.
smf 1.1.8 rus utf-8

Mavn

Цитата: Mavn от 16 февраля 2008, 16:35:08
Решение предоставлено нашими друзьями www.edogs.ru
Sources/Subs.php

function shorten_subject($subject, $len)
{
    global $func;

    // It was already short enough!
    if ($func['strlen']($subject) <= $len)
        return $subject;
$subject=mb_convert_encoding($subject,'CP1251','UTF-8');
    // Shorten it by the length it was too long, and strip off junk from the end.
//    return $func['substr']($subject, 0, $len) . '...';
$subject=$func['substr']($subject, 0, $len) . '...';
$subject=mb_convert_encoding($subject,'UTF-8','CP1251');
return $subject;
}

пробуйте
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Psixo

Данный код, к сожалению, не дал желаемого эффекта, проблемы с UTF-8 остались.
Прийдётся переводить под 1251,а жаль.

stepan_kv

Мне помогло. Только $func заменил на $smcFunc. У меня SMF 2.0 RC1

Psixo

Хех. Я просто вместо 1.1.8 поставил SMF 2.0 RC1 с UTF-8, работает всё нормально, забил на возню с 1.1.8, всё равно потом пришлось бы обновлять :)

Mavn

Цитата: stepan_kv от 20 февраля 2009, 23:06:58
Мне помогло. Только $func заменил на $smcFunc. У меня SMF 2.0 RC1

в smf 2.0  просто по другому называется переменная
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

saks

Доброго времени суток!
у меня таже самая проблема имеется, поскольку стоит связка SMF 1.1.9 + TP то перейти на SMF 2 пока не представляется возможным. но при замене функции на приведенную Mavn , вылазит ошибка:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /usr/local/www/data-dist/saks/Sources/Subs.php on line 3237
в чем может быть проблема ?

Mr. Anviss

Цитата: saks от 02 июня 2009, 06:48:53
Доброго времени суток!
у меня таже самая проблема имеется, поскольку стоит связка SMF 1.1.9 + TP то перейти на SMF 2 пока не представляется возможным. но при замене функции на приведенную Mavn , вылазит ошибка:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /usr/local/www/data-dist/saks/Sources/Subs.php on line 3237
в чем может быть проблема ?
Возможно у тебя на хостинге не поддерживается mb_convert_encoding

saks

а как можно побороть эту проблему ? может есть альтернативная функция которая может конвертить туда сюда ? модуль iconv у меня стоит в PHP

Mr. Anviss

Замени $subject=mb_convert_encoding($subject,'UTF-8','CP1251'); на $subject=iconv('UTF-8','windows-1251',$subject);

saks

Цитата: anviss от 02 июня 2009, 18:12:08
Замени $subject=mb_convert_encoding($subject,'UTF-8','CP1251'); на $subject=iconv('UTF-8','windows-1251',$subject);
угу. попоробовал, вроде работает, но проблему не сняло, так и висят квадратики в конце
http://www.paraplanoff.net/index.php?action=forum
вообще конечно это ни на что не влияет, только как эстетический момент, но устранить хотелось бы все равно

saks

Спасибо большое ! проблему решил!
Цитата: anviss от 02 июня 2009, 18:12:08
Замени $subject=mb_convert_encoding($subject,'UTF-8','CP1251'); на $subject=iconv('UTF-8','windows-1251',$subject);
в данной строке в iconv надо кодировку поменять наоборот. т.к. в описании iconv эти параметры стоят перевернуто относительно mb_convert_encoding.
то есть для данной строки должно быть iconv('windows-1251','UTF-8',$subject);

вот что получилось в рабочем варианте:
// Shorten a subject + internationalization concerns.
function shorten_subject($subject, $len)
{
    global $func;

    // It was already short enough!
    if ($func['strlen']($subject) <= $len)
        return $subject;
$subject=iconv('UTF-8','windows-1251',$subject);
//$subject=mb_convert_encoding($subject,'CP1251','UTF-8');
    // Shorten it by the length it was too long, and strip off junk from the end.
//    return $func['substr']($subject, 0, $len) . '...';
$subject=$func['substr']($subject, 0, $len) . '...';
//$subject=mb_convert_encoding($subject,'UTF-8','CP1251');
$subject=iconv('windows-1251','UTF-8',$subject);
return $subject;
}


saks

Цитата: digger от 03 июня 2009, 05:33:56
Оригинальное решение от друзей с www.edogs.ru какое-то странное.
Почему бы просто mb_substr не сделать вместо того чтобы перекодировать туда-сюда.
Кстати, а зачем это было необходимо вообще , перекодировать туда-сюда? хотя помогло :)

Mavn

Цитата: digger от 03 июня 2009, 05:33:56
Оригинальное решение от друзей с www.edogs.ru какое-то странное.
Почему бы просто mb_substr не сделать вместо того чтобы перекодировать туда-сюда.
сделай проблем не вижу, мне дали решение я опубликовал, у тебя есть другое решение выложи
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

dr vatson

Цитата: saks от 03 июня 2009, 04:49:49
Спасибо большое ! проблему решил! в данной строке в iconv надо кодировку поменять наоборот. т.к. в описании iconv эти параметры стоят перевернуто относительно mb_convert_encoding.
то есть для данной строки должно быть iconv('windows-1251','UTF-8',$subject);

вот что получилось в рабочем варианте:
// Shorten a subject + internationalization concerns.
function shorten_subject($subject, $len)
{
    global $func;

    // It was already short enough!
    if ($func['strlen']($subject) <= $len)
        return $subject;
$subject=iconv('UTF-8','windows-1251',$subject);
//$subject=mb_convert_encoding($subject,'CP1251','UTF-8');
    // Shorten it by the length it was too long, and strip off junk from the end.
//    return $func['substr']($subject, 0, $len) . '...';
$subject=$func['substr']($subject, 0, $len) . '...';
//$subject=mb_convert_encoding($subject,'UTF-8','CP1251');
$subject=iconv('windows-1251','UTF-8',$subject);
return $subject;
}



Я так и не понял где эти строчки находятся чтобы их поменять?

Mavn

ну когда почитаешь хотя бы эту тему сначала поймешь
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

mowshon


s-m

Цитата: mowshon от 28 августа 2010, 16:56:52mb_substr($text , 0, 10, "UTF-8")Помогло.
А чуть подробней можно пояснить, как делал? :)

mowshon

оффтоп: Хм... год прошел  ;) как быстро бежит время
Почитайте о функции на
http://php.net/manual/ru/function.mb-substr.php

4 параметром можно указать кодировку строки в которой будет работать.