utf-8 и windows-1251, проблема с кодировкой RSS

Вечер дорбрый
Вот ЛайвСтрит имеет кодировку utf-8, а значит и RSS он отправляет с этой кодировкой.

На сайт куда должна идти рассылка стоит старенькая кодировочка windows-1251, и потому одни крокозябры.

Я не пойму как быть.
Как сделать чтобы с блога отправлялась windows-1251?
Файл ActionPeople.class.php уже кодировал через PSPad и Notepad+, но толку мало.

Что то мне подсказывает что это не судьба, читать RSS: (

4 комментария

avatar
понимать различные кодировки RSS — это задача читалки и копать нужно в ее сторону
  • ort
  • 0
avatar
Обнадеживающее: )

Буду думать где взять себе на сайт читалку.
Спс Орт, хотя бы теперь не буду лезть в двиг ЛС, уже что-то.
avatar
понимать различные кодировки RSS — это задача читалки и копать нужно в ее сторону
Может кто вдруг подскажет что копать))

Вот код, первой в истории RSS читалки: )

<?php
/*
+--------------------------------------------------------------------------
|   MkPortal
|   ========================================
|   by Meo aka Luponero <Amedeo de longis>
|
|   © 2004 mkportal.it
|   http://www.mkportal.it
|   Email: luponero@mclink.it
|
+---------------------------------------------------------------------------
|
|   > MKPortal
|   > Written By Amedeo de longis
|   > Date started: 9.2.2004
|
|   Block RSS Reader 1.1 
|       optimized for restricted server environment
|       with allow_url_fopen = off
|
|   > © 2005 by Peter (Peter@ibforen.de)
|
+--------------------------------------------------------------------------
*/

global $mklib, $DB;

define ('CACHE_PATH', $mklib->sitepath."mkportal/cache/");

unset($rss_source);

$DB->query("SELECT * FROM mkp_rss WHERE active='1' ORDER BY position ASC");
if ($DB->get_num_rows()) {
    while ($r = $DB->fetch_row()) {
        $rss_source[$r['name']] = $r['url'];
    }
}

function rss_clean_html($text = "") {
    $text = str_replace("Г¤", "д", $text);
    $text = str_replace("Г¶", "ц", $text);
    $text = str_replace("Гј", "ь", $text);
    $text = str_replace("Г„", "Д", $text);
    $text = str_replace("Г–", "Ц", $text);
    $text = str_replace("Гњ", "Ь", $text);
    $text = str_replace("Гџ", "Я", $text);
    $text = str_replace("&", "&", $text);
    $text = str_replace("'", "'", $text);
    return $text;
}

function rss_clean_entry($entry = "") {
    if ($entry == "") return;
    $entry = str_replace("<"."![CDATA[", "", $entry);
    $entry = trim(str_replace("]]".">", "", $entry));
    return rss_clean_html($entry);
}

function rss_get_rdf($rdf_file = "", $cache_file = "") {
    global $mklib;
        
    $cache_file = CACHE_PATH.$cache_file.".rss";
    if (!file_exists($cache_file)) {
        $fh = fopen($cache_file, "wb");
        fwrite($fh, "");
        fclose($fh);
        $new = TRUE;
    }
    $ctime = time() - $mklib->config['rss_cache_time'];
    if ($new || filemtime($cache_file)<$ctime) {
        $current_version = (int)str_replace('.', '', phpversion());
        if ($current_version < 420) {
            $allow_url = ini_get ('allow_url_fopen');
        } else {
            $a = ini_get_all();
            $allow_url = $a['allow_url_fopen']['global_value'];
            unset ($a);
        }
        if ($allow_url) {
            $rdf = implode("",file($rdf_file));
        }
        else {
            $url = parse_url($rdf_file);
            $fp = fsockopen ($url['host'], 80, $errno, $errstr, 30);
            if (!$errno && !$errstr) {
                fwrite ($fp, "GET {$url['path']}?{$url['query']}#{$url['fragment']} HTTP/1.0\r\nHost: {$url['host']}\r\n\r\n");
                while (!feof($fp)) {
                    $rdf .= fgets($fp,1024);
                }
                $rdf = preg_replace("`.*?(<\?xml)`is", "\\1", $rdf);
                fclose($fp);
            }
        }
        $fh = fopen($cache_file, "wb");
        fwrite($fh, $rdf);
        fclose($fh);
    }
    else {
        $rdf = implode ("", file ($cache_file));
    }

    $rdf = rss_clean_html($rdf);
    if (preg_match_all("|<channel(.*)</channel>|Uism",$rdf, $title, PREG_PATTERN_ORDER)) {
        preg_match_all("|<title>(.*)</title>.*<link>(.*)</link>.*<description>(.*)</description>|Uism", $title[1][0], $regs, PREG_PATTERN_ORDER);
        $content .= "<b><a href='".$regs[2][0]."' target='_blank' class='uno' ><span style='font-size:11pt;'>".$regs[1][0]."</span></a></b><br /><i>".$regs[3][0]."</i><br /><br />";
    };

    $result = preg_match_all("|<item>(.*?)</item>|is",$rdf, $items, PREG_PATTERN_ORDER);
    if (!$result) {
        preg_match_all("|<item.*?>(.*?)</item>|is",$rdf, $items, PREG_PATTERN_ORDER);
    }
    for ($i = 0; $i < min($mklib->config['rss_max_items'], count($items[1])); $i++){
        preg_match("|<title>(.*)</title>.*<link>(.*)</link>|Uism",$items[1][$i], $matches);
        $content .= "<b><a href='".$matches[2]."' target='_blank' class='uno' >".rss_clean_entry($matches[1])."</a></b><br />";
        if ($mklib->config['rss_desc']) {
            preg_match("|<description>(.*)</description>|Uism",$items[1][$i], $matches);
            if (count($matches)) {
                $desc = rss_clean_entry($matches[1]);
                if (strlen($desc) > $mklib->config['rss_desc_length']) {
                    $desc = substr($desc, 0, $mklib->config['rss_desc_length']);
                    $desc = substr($desc, 0, strrpos($desc, " " ));
                    $desc .= " ...";
                }
                $content .= $desc."<br /><br />\n";
            }
        }
    }
    return $content."<br /><br />";
}

$content = "";

if (is_array($rss_source)) {
    global $std;
    if ($mklib->config['rss_marquee']) {
        $mklib->load_lang("lang_ad_rss.php");
        $marquee_begin  = "\n<marquee direction='up' scrolldelay='0' scrollamount='2' height='{$mklib->config['rss_marquee_height']}' onMouseover='javascript:this.scrollAmount=\"0\"' onMouseout='javascript:this.scrollAmount=\"2\"' onClick='javascript:this.scrollAmount=\"6\"' onDblClick='javascript:this.scrollAmount=\"0\"' ";
        $marquee_begin .= "title='{$mklib->lang['rss_marquee_tip']}'>\n";
        $marquee_end = "\n</marquee>\n";
    }
    $content = "\n<tr><td class='tdblock'>\n<div style='margin:2px;'>\n".$marquee_begin;
    $content .= "<div class='tdblock'>".rss_clean_html($mklib->create_date(time(), "long"))."<br /><br /></div>\n";
    foreach($rss_source as $source => $url) {
        $content .= rss_get_rdf($url,$source );
    }
    $content .= $marquee_end."</div>\n</td></tr>\n";
}

?>

Есть большая вероятность что вы ничего в этом не поняли)
Но это нормально))
avatar
Не нужно сложных читалок. Я использовал этот скрипт как раз для такого случая (разные сайты-разные кодировки). Плюс экономит место, прокручивая сообщения.
Из сложностей — нужно получить google API здесь
Ну и выполнить все шаги что указаны на странице скрипта. Пхп не нужен — используется один только javascript.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.