Понедельников НЕТ!
Регистрация или вход Регистрация или вход Избранное на этом сайте | Главная | Анкета | Рекомендовать | Обратная связь | В избранное | Сделать домашней
Скачать 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
    Прочитано: 9768 раз
    [ Назад | Начало | Наверх ]
    Комментарии

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

    Rambler's Top100

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