1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

Проблема с кодировкой в SE 3.20

Discussion in 'Прочая Поддержка - Help Requests' started by Plushkin, Mar 11, 2012.

  1. Gooos абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    таких как вы сотни facepalm
    100500 раз уже об этом говорилось! http://www.socengine.ru/add/less/85-izbavlyaemsya-ot-krakozyab-kodirovka-yazyka.html
    На форуме неоднократно обсуждали проблему о том, что в конце слов появляются странные вопросики в ромбиках(в эксплоере буква Ю).
    Так отрабатывает функция встроенная в smarty "Smarty truncate modifier plugin".
    Так же ранее было замечено, что кириллические символы в кодировке utf-8 занимают 2 байта.
    Когда срабатывает Smarty truncate, у некоторых букв обрезается один байт, а второй байт превращается в "вопросик в ромбе" или �.

    Данный хак распространяется на кодировку utf-8 (в базе данных).

    решение следущее:
    необходимо установить модуль php - mbstring (для работы с мультибайтными строками)
    находим файлик /include/smarty/plugins/modifier.truncate.php
    PHP:

    <?php
    /**
    * Smarty plugin
    * @package Smarty
    * @subpackage plugins
    */
     
     
    /**
    * Smarty truncate modifier plugin
    *
    * Type: modifier<br>
    * Name: truncate<br>
    * Purpose: Truncate a string to a certain length if necessary,
    * optionally splitting in the middle of a word, and
    * appending the $etc string or inserting $etc into the middle.
    * @link http://smarty.php.net/manual/en/language.modifier.truncate.php
    * truncate (Smarty online manual)
    * @author Monte Ohrt <monte at ohrt dot com>
    * @param string
    * @param integer
    * @param string
    * @param boolean
    * @param boolean
    * @return string
    */
    function smarty_modifier_truncate($string$length 80$etc '...',
    $break_words false$middle false)
    {
    if (
    $length == 0)
    return 
    '';
     
    if (
    strlen($string) > $length) {
    $length -= strlen($etc);
    if (!
    $break_words && !$middle) {
    $string preg_replace('/\s+?(\S+)?$/'''substr($string0$length+1));
    }
    if(!
    $middle) {
    return 
    substr($string0$length).$etc;
    } else {
    return 
    substr($string0$length/2) . $etc substr($string, -$length/2);
    }
    } else {
    return 
    $string;
    }
    }
     
    /* vim: set expandtab: */
     
    ?>
    заменяем на следующее(закоментировал старые строки для удобства):
    PHP:

    <?php
    /**
    * Smarty plugin
    * @package Smarty
    * @subpackage plugins
    */
     
     
    /**
    * Smarty truncate modifier plugin
    *
    * Type: modifier<br>
    * Name: truncate<br>
    * Purpose: Truncate a string to a certain length if necessary,
    * optionally splitting in the middle of a word, and
    * appending the $etc string or inserting $etc into the middle.
    * @link http://smarty.php.net/manual/en/language.modifier.truncate.php
    * truncate (Smarty online manual)
    * @author Monte Ohrt <monte at ohrt dot com>
    * @param string
    * @param integer
    * @param string
    * @param boolean
    * @param boolean
    * @return string
    */
    function smarty_modifier_truncate($string$length 80$etc '...',
    $break_words false$middle false)
    {
    if (
    $length == 0)
    return 
    '';
     
    if (
    mb_strlen($stringutf8) > $length) {
    //if (strlen($string) > $length) {
    $length -= mb_strlen($etcutf8);
    //$length -= strlen($etc);
    if (!$break_words && !$middle) {
    $string mb_ereg_replace('/\s+?(\S+)?$/'''mb_substr($string0$length+1utf8), utf8);
    //$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
    }
    if(!
    $middle) {
    return 
    mb_substr($string0$lengthutf8).$etc;
    //return substr($string, 0, $length).$etc;
    } else {
    return 
    mb_substr($string0$length/2utf8) . $etc mb_substr($string, -$length/2utf8);
    //return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
    }
    } else {
    return 
    $string;
    }
    }
     
    /* vim: set expandtab: */
     
    ?>
    если кто заметил, можно заменить '...' в конце предложений на что-нибудь своё

    P.S: так-же можно воспользоваться встроенной волшебной фичей, когда неправильная функция превращается в правильную. http://ru.php.net/manual/en/mbstring.overload.php
    Plushkin and chellas like this.
  2. chellas User


    Offline
    Message Count:
    111
    Likes Received:
    1
    My version of SE:
    3.20
    спасиб огромное)) все работает
  3. Plushkin Thread starter User


    Offline
    Message Count:
    67
    Likes Received:
    0
    Огромное спасибо, получилось.

Share This Page

All rights reserved SocEngine.ru ©