Понедельников НЕТ!
Регистрация или вход Регистрация или вход Избранное на этом сайте | Главная | Анкета | Рекомендовать | Обратная связь | В избранное | Сделать домашней
Скачать SSDForums
Скачать SSDForums 1.0.1 Скачать SSDForums 1.0.1
Скачать SSDForums 1.0.1 SP1 Скачать SSDForums 1.0.1 SP1
Скачать SSDForums 1.0.1 SP2 Скачать SSDForums 1.0.1 SP2
SSD Forums 1.0.1 SP3 only Slaed 3.5 Pro SSD Forums 1.0.1 SP3 only Slaed 3.5 Pro
SSD Forums 1.0.1 SP4-beta only Slaed 4.1 Pro SSD Forums 1.0.1 SP4-beta only Slaed 4.1 Pro
Jewelry Сase Team
Скачать Ruby Chat 0.1.1 Скачать Ruby Chat 0.1.1
Меню
Главная
Форум
Магазин цифровых товаров

Новости
Подписка на новости
Темы новостей
Добавить новость

Каталог файлов
Карта файлового архива
Публикации
Вопросы и ответы

Опросы
Анкета пользователя
Чат

BestMaker
Викторина
Архив новостей
Карманный оракул
Поиск по сайту с помощью Яндекс
Поиск по сайту с помощью Google
Фото дня
Для души
Погода на 3 дня
IndexCat
IndexTop
Map_Pages
Поиск по сайту









Интересное в сети
  • Какие преимущества дает Аренда бульдозера.
  • Публикации
    RSS
    Кодировка RSS потока


    Делаем автоматическое определение кодировки потока при импорте.
    Цель: сделать возможным импорт с сайтов с другой кодировкой
    Автор: Furry




    1. Открываем function/sources.php и перед самой первой функцией, то есть после
    Код
    1
    if (!defined("FUNC_FILE")) die("Illegal File Access");
    , добавляем такой код:
    Код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    function detect_cyr_charset($str) {

          $charsets = Array(
             'k' => 0,
             'w' => 0,
             'd' => 0,
             'i' => 0,
             'm' => 0
          );

          for ( $i = 0, $length = strlen($str); $i < $length; $i++ ) {
             $char = ord($str[$i]);
          //non-russian characters
          if ($char < 128 || $char > 256) continue;
          //CP866
          if (($char > 159 && $char < 176) || ($char > 223 && $char < 242))
             $charsets['d']+=LOWERCASE;
          if (($char > 127 && $char < 160)) $charsets['d']+=UPPERCASE;
          //KOI8-R
          if (($char > 191 && $char < 223)) $charsets['k']+=LOWERCASE;
          if (($char > 222 && $char < 256)) $charsets['k']+=UPPERCASE;
          //WIN-1251
          if ($char > 223 && $char < 256) $charsets['w']+=LOWERCASE;
          if ($char > 191 && $char < 224) $charsets['w']+=UPPERCASE;
          //MAC
          if ($char > 221 && $char < 255) $charsets['m']+=LOWERCASE;
          if ($char > 127 && $char < 160) $charsets['m']+=UPPERCASE;
          //ISO-8859-5
          if ($char > 207 && $char < 240) $charsets['i']+=LOWERCASE;
          if ($char > 175 && $char < 208) $charsets['i']+=UPPERCASE;
       }

       arsort($charsets);
       return key($charsets);

    }


    2. Далее находим строку
    Код
    1
    $content .= "<tr><td><img src="images/arrow.gif" border="0"> $pubdate_rss - <a href="$link_rss" target="_blank" title="$title_rss">$title_rss</a></td></tr><tr><td>$description_rss</td></tr>";
    , перед ней добавляем
    Код
    1
    2
    3
    4
    5
    6
    7
    if (detect_cyr_charset($description_rss) != "w") {
                       
                        $title_rss = iconv("UTF-8","cp1251", $title_rss);
                        $description_rss = iconv("UTF-8","cp1251", $description_rss);
                        $pubdate_rss = iconv("UTF-8","cp1251", $pubdate_rss);
                       
                        }


    3. Находим строчку
    Код
    1
    list($title, $content, $url, $refresh, $otime) = $db->sql_fetchrow($db->sql_query("SELECT title, content, url, refresh, time FROM ".$prefix."_blocks WHERE bid='$bid'"));
    после неё добавляем:
    Код
    1
    2
    3
    4
    5
    6
    if (detect_cyr_charset($content) != "w") {
                       
                        $title = iconv("UTF-8","cp1251", $title);
                        $content = iconv("UTF-8","cp1251", $content);
                       
                    }


    Что получаем: При импорте определяет кодировку потока, и если она не равна Кирилице Виндоус, то конвертируем из UTF-8 в CP1251. (например при импорте с rbc.ru)

    Подходит для версии 2.1, 2.2, 2.3


    Способ два.
    Если необходима поддержка большего количества кодировок, делаем так:



    Шаг №1 так и остаётся.

    Второй код шага 2 выглядит так:

    Код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if (detect_cyr_charset($description_rss) == "d") {
                   
                   $description_rss = iconv("CP866","cp1251", $description_rss);
                   $title_rss = iconv("CP866","cp1251", $title_rss);
                   $pubdate_rss = iconv("CP866","cp1251", $pubdate_rss);
                   
                } elseif (detect_cyr_charset($description_rss) == "k") {

                   $description_rss = iconv("KOI8-R","cp1251", $description_rss);
                   $title_rss = iconv("KOI8-R","cp1251", $title_rss);
                   $pubdate_rss = iconv("KOI8-R","cp1251", $pubdate_rss);

                } elseif (detect_cyr_charset($description_rss) == "i") {

                   $description_rss = iconv("ISO-8859-5","cp1251", $description_rss);
                   $title_rss = iconv("ISO-8859-5","cp1251", $title_rss);
                   $pubdate_rss = iconv("ISO-8859-5","cp1251", $pubdate_rss);

                } elseif (detect_cyr_charset($description_rss) != "d" && detect_cyr_charset($description_rss) != "k" && detect_cyr_charset($description_rss) != "i" && detect_cyr_charset($description_rss) != "m" && detect_cyr_charset($description_rss) != "w") {

                   $description_rss = iconv("UTF-8","cp1251", $description_rss);
                   $title_rss = iconv("UTF-8","cp1251", $title_rss);
                   $pubdate_rss = iconv("UTF-8","cp1251", $pubdate_rss);

                }


    Второй код шага 3 выглядит так:

    Код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if (detect_cyr_charset($content) == "d") {
                   
                   $title = iconv("CP866","cp1251", $title);
                   $content = iconv("CP866","cp1251", $content);
                   
                } elseif (detect_cyr_charset($content) == "k") {

                   $title = iconv("KOI8-R","cp1251", $title);
                   $content = iconv("KOI8-R","cp1251", $content);

                } elseif (detect_cyr_charset($content) == "i") {

                   $title = iconv("ISO-8859-5","cp1251", $title);
                   $content = iconv("ISO-8859-5","cp1251", $content);

                } elseif (detect_cyr_charset($content) != "d" && detect_cyr_charset($content) != "k" && detect_cyr_charset($content) != "i" && detect_cyr_charset($content) != "m" && detect_cyr_charset($content) != "w") {

                   $title = iconv("UTF-8","cp1251", $title);
                   $content = iconv("UTF-8","cp1251", $content);

                }


    В силу иногда не очень правильной работы функции определения кодировки, без необходимости способ два не использовать!



    Дата публикации: 13.06.2007
    Прочитано: 10280 раз
    [ Назад | Начало | Наверх ]
    Комментарии

    Sidious
    Дата: 15.06.2007 | Комментарий: 1
    SidiousВ принципе изза использования функции iconv данный код на некоторых хостерах не будет работать.
    Вы не можете отправить комментарий анонимно, пожалуйста зарегистрируйтесь.
    Календарь 3 в 1
    - М - Г + Г + М
    Июнь, 2018
    пнвтсрчтптсбвс
    123
    45678910
    11121314151617
    18192021222324
    252627282930
    Купить.
    Можно в кредит на 90 дней!
    Навигация
    »» RSS
    Главная | Форум | Новости | Подписка на новости | Темы новостей | Добавить новость | Каталог файлов | Карта файлового архива | Публикации | Вопросы и ответы | Опросы | Анкета пользователя | Чат | BestMaker | Викторина | Архив новостей | Карманный оракул | Поиск по сайту с помощью Яндекс | Поиск по сайту с помощью Google | Фото дня | Для души | Погода на 3 дня | IndexCat | IndexTop | Map_Pages | Весь Оракул

    Rambler's Top100

    Генерация страницы: 0.165 сек. и 17 запросов к базе данных за 0.022 сек.
    Web site engine code is Copyright © 2006 by SLAED CMS. All rights reserved.