utf-8 и windows-1251, проблема с кодировкой RSS
Вечер дорбрый
Вот ЛайвСтрит имеет кодировку utf-8, а значит и RSS он отправляет с этой кодировкой.
На сайт куда должна идти рассылка стоит старенькая кодировочка windows-1251, и потому одни крокозябры.
Я не пойму как быть.
Как сделать чтобы с блога отправлялась windows-1251?
Файл ActionPeople.class.php уже кодировал через PSPad и Notepad+, но толку мало.
Что то мне подсказывает что это не судьба, читать RSS: (
Вот ЛайвСтрит имеет кодировку utf-8, а значит и RSS он отправляет с этой кодировкой.
На сайт куда должна идти рассылка стоит старенькая кодировочка windows-1251, и потому одни крокозябры.
Я не пойму как быть.
Как сделать чтобы с блога отправлялась windows-1251?
Файл ActionPeople.class.php уже кодировал через PSPad и Notepad+, но толку мало.
Что то мне подсказывает что это не судьба, читать RSS: (
- 0
- 23 августа 2010, 21:21
- Unwelcom
понимать различные кодировки 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";
}
?>Есть большая вероятность что вы ничего в этом не поняли)
Но это нормально))
Не нужно сложных читалок. Я использовал этот скрипт как раз для такого случая (разные сайты-разные кодировки). Плюс экономит место, прокручивая сообщения.
Из сложностей — нужно получить google API здесь
Ну и выполнить все шаги что указаны на странице скрипта. Пхп не нужен — используется один только javascript.
Из сложностей — нужно получить google API здесь
Ну и выполнить все шаги что указаны на странице скрипта. Пхп не нужен — используется один только javascript.
Комментарии (4)
RSS свернуть / развернуть