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

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


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