Суббота, 2024 Ноябрь 23, 12:08:19
5mw.ru
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта
заходите аналог или тут

Категории каталога
Мои статьи [842]
Уникальный материал
Секреты в контакте [23]
Секреты в контакте
Программы для контакта [15]
Программы для контакта
Секс [494]
sex

Мини-чат

Наш опрос
Как вы относитесь к знакомствам через интернет?
Всего ответов: 38

Мы :)
[Добавь сайт](VIP)
Купить полистиролбетонные блоки. Доступные цены!

Это интересно

Наши баннеры

 

Главная » Статьи » Мои статьи

Избавляемся от кракозяб (кодировка языка) NEWS SocialEngine 3
У многих начинающих пользователей SE возникают проблемы с правильным отображением русских букв. 
В данном уроке будут рассмотрены способы решения этой проблемы. 

 


1. Проблемы сервера

Часто на сервере включена по умолчанию совсем не та кодировка, что нам нужна. Мы включим нужную кодировку сами.
Для этого в файл .htaccess надо дописать следующие строки:

 
# Выключить обработку модулем mod_charset
<IfModule mod_charset.c>
  CharsetDisable On
</IfModule>
# Выставить кодировку по умолчанию стандартными средствами apache
AddDefaultCharset UTF-8
php_value default_charset utf-8
php_flag register_globals off


2. Проблемы БД (SQL)

*

3. Невнимательность пользователя

Если при добавления мода или хака в шаблон или просто вводе русских символов (это файлы .tpl) потом на странице в браузере вы видите кракозябы взамен символов, то нужно:
Открыть проблемный файл в php редакторе (рекомендую notepad++) и изменить кодировку в файле на utf-8, затем сохранить и залить на сервер. Появится русский язык.
Хотя лучше всего использовать моды и хаки, где есть поддержка нескольких языков, на нашем сайте именно такие моды и хаки.

4. Недоработки SE

Для работы этого способа понадобиться модуль php - MBString

Заменить modifier.truncate.php на этот:

 
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/


/**
* Smarty truncate modifier plugin
*
* Type:     modifier

* Name:     truncate

* 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
* @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($string, 0, $length+1));
        }
        if(!$middle) 
        {
            return substr($string, 0, $length).$etc;
        } 
         else 
         {
            return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
         }
    } 
     else 
     {*/
        return $string;
     //}
}

/* vim: set expandtab: */

?>


Если нет модуля php - MBString

Заменить modifier.truncate.php на этот:

 
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/

/**
* Smarty truncate modifier plugin
*
* Type:     modifier

* Name:     truncate

* 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
* @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 -= min($length, strlen($etc));
        if (!$break_words && !$middle) {
            $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
        }
        if(!$middle) {
            //return substr($string, 0, $length) . $etc;
            return utf8_str_limit($string, $length, $etc);
        } else {
            return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
        }
    } else {
        return $string;
    }
}


/**
* Обрезает текст в кодировке UTF-8 до заданной длины,
* причём последнее слово показывается целиком, а не обрывается на середине.
* Html сущности корректно обрабатываются.
*
* @param    string   $s           текст в кодировке UTF-8
* @param    int      $maxlength   ограничение длины текста
* @param    string   $continue    завершающая строка, которая будет вставлена после текста, если он обрежется
* @param    string   &$is_cutted  текст был обрезан?
* @return   string
*
* @license  http://creativecommons.org/licenses/by-nc-sa/3.0/
* @author   Nasibullin Rinat
* @charset  ANSI
* @version  3.3.3
*/
function utf8_str_limit($s, $maxlength = 256, $continue = "\xe2\x80\xa6", &$is_cutted = null) #"\xe2\x80\xa6" = "…"
{
    $is_cutted = false;
    if ($continue === null) $continue = "\xe2\x80\xa6";

    #оптимизация скорости:
    #{{{
    if (strlen($s) <= $maxlength) return $s;
    $s2 = str_replace("\r\n", '?', $s);
    $s2 = preg_replace('/&(?> [a-zA-Z][a-zA-Z\d]+
                            | \#(?> \d{1,4}
                                  | x[\da-fA-F]{2,4}
                                )
                          );  # html сущности (&lt; &gt; &amp; &quot;)
                        /sx', '?', $s2);
    #utf8_decode() converts characters that are not in ISO-8859-1 to '?', which, for the purpose of counting, is quite alright.
    if (strlen($s2) <= $maxlength || strlen(utf8_decode($s2)) <= $maxlength) return $s;
    #}}}

    preg_match_all('/(?> \r\n   # переносы строк
                       | &(?> [a-zA-Z][a-zA-Z\d]+
                            | \#(?> \d{1,4}
                                  | x[\da-fA-F]{2,4}
                                )
                          );  # html сущности (&lt; &gt; &amp; &quot;)
                       | [\x09\x0A\x0D\x20-\x7E]           # ASCII
                       | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
                       |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs
                       | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
                       |  \xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates
                       |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
                       | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
                       |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
                     )
                    /sx', $s, $m);
    #d($m);
    if (count($m[0]) <= $maxlength) return $s;
    $is_cutted = true;
    $left = implode('', array_slice($m[0], 0, $maxlength));
    #из диапазона ASCII исключаем буквы, цифры, закрывающие парные символы [a-zA-Z\d)}\];]
    #нельзя вырезать в конце строки символ ";", т.к. он используются в сущностях &xxx;
    $left2 = rtrim($left, "\x00..\x28\x2A..\x2F\x3A\x3C\x40\x5C\x5E..\x60\x7C\x7E\x7F");
    if (strlen($left) !== strlen($left2)) return $left2 . $continue;

    #добавляем остаток к обрезанному слову
    $right = implode('', array_slice($m[0], $maxlength));
    preg_match('/^(?: [a-zA-Z\d\)\]\}\-\.]  #английские буквы или цифры, закрывающие парные символы, дефис для составных слов, дата, IP-адреса, URL типа www.ya.ru!
                    | \xe2\x80[\x9d\x99]|\xc2\xbb|\xe2\x80\x9c  #закрывающие кавычки
                    | \xc3[\xa4\xa7\xb1\xb6\xbc\x84\x87\x91\x96\x9c]|\xc4[\x9f\xb1\x9e\xb0]|\xc5[\x9f\x9e]  #турецкие
                    | \xd0[\x90-\xbf\x81]|\xd1[\x80-\x8f\x91]   #русские буквы
                    | \xd2[\x96\x97\xa2\xa3\xae\xaf\xba\xbb]|\xd3[\x98\x99\xa8\xa9]  #татарские
                  )+
                /sx', $right, $m);
    #d($m);
    $right = isset($m[0]) ? rtrim($m[0], '.-') : '';
    $s2 = $left . $right;
    if (strlen($s2) !== strlen($s)) $s2 .= $continue;
    return $s2;
}

?>
 

http://www.socengine.ru/less/85-izbavlyaemsya-ot-krakozyab-kodirovka-yazyka.html

Категория: Мои статьи | Добавил: admin (2011 Июнь 13) news
Просмотров: 687 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
 
Форма входа

Поиск

Друзья сайта

  • Наши партнеры
  • Рекомендуем посетить: заходим! :)

    Статистика
     
    Привет,Прохожий !
    12:08:19 || 2024 Ноябрь 23
    Онлайн всего: 68
    Гостей: 68
    Пользователей: 0

    Интересная загагулина
    Ух ты..... Девушки красотки
    СМС на зло ему
    Для тех кому лениво обновлять контакт и ждать когда придёт сообщение качайте
    Важен ли мой внешний вид?
    ССЫЛКИ ДОБАВЛЕНИ В ПОИСКОВИКИ
    Сексоголизм — зависимость ХХI века
    Александр Куприн. Гранатовый браслет часть 1
    СМС Поздравления с Международным женским днем 8 Марта
    Буквы дрожащие
    Бесплатный хостинг на Юкоз.ru позволяет быстро создать свой сайт
    Эстонское боевое искусство
    Почему после 2 августа нельзя купаться
    КАК ВЫБРАТЬ КУПАЛЬНИК
    Программа для печати визиток: как выбрать лучшую
    Как я попал на Мальдивы за 2000 рублей
    Сайт понижен в выдаче за переоптимизацию текстов
    Такси – как выбрать?
    КАК ВЫБРАТЬ ПОДВЕСНОЙ ЛОДОЧНЫЙ МОТОР
    Как выбрать транспортную компанию?
    Срочная печать визиток это просто
    Как говорить с младенцем

    Ваша реклама
    Здесь может находиться ваша реклама. Ссылка или банер. Обращаться в ICQ 310-481-985

    Copyright MyCorp © 2024