|
|
|
|
|
|
|
|
|
кодировка новостной ленты?
| |
#1 | |
|
31.01.2006, 13:32
Модернизировал модуль Новости Украины для чтения новостей с moigorod.ru (Хабаровск), однако не читабельный текст. В одном случае одни вопросительные знаки, во втором - вражеские кабалистические знаки. В приведенном тексте помечено. Не могу понять, что я не так сделал?
PHP код:
<?php /************************************************** ***********************/ /* На основе News_Ukr v0.11 for PHP-Nuke 6.5-7.5 */ /* ================================================== ====================*/ /* Оригинальный универсальный модуль импорта ленты новостей (страниц RSS)*/ /* RSS Reader Copyright (c) by Miha_hard http://rus-phpnuke.com */ /* ================================================== ====================*/ /* Модификация 23.01.2006 Daemon (maddog@email.kht.ru) */ /* для сайта: */ /* http://cook.h16.ru */ /* ================================================== ====================*/ /* Модуль импортирует новости Хабаровска */ /* http://www.moigorod.ru */ /* Все информация разбита на 16 отдельных разделов, навигация */ /* расположена с правой стороны от ленты новостей. */ /************************************************** ***********************/ if( !stristr( $_SERVER['SCRIPT_NAME'], "modules.php" ) ) { die( "You can't access this file directly..." ); } require_once("mainfile.php"); $module_name = basename(dirname(__FILE__)); set_time_limit(0); // $xml_parser = xml_parser_create('UTF-8'); $rss_channel = array(); $currently_writing = ""; $main = ""; $item_counter = 0; $img = "<img border=\"0\" src=\"modules/$module_name/images/arrow.gif\" width=\"12\" height=\"12\">";//мини-лого возле титлов новостей (стрелка) function startElement($parser, $name, $attrs) { global $rss_channel, $currently_writing, $main; switch($name) { case "RSS": case "RDF:RDF": case "ITEMS": $currently_writing = ""; break; case "CHANNEL": $main = "CHANNEL"; break; case "IMAGE": $main = "IMAGE"; $rss_channel["IMAGE"] = array(); break; case "ITEM": $main = "ITEMS"; break; default: $currently_writing = $name; break; } } function endElement($parser, $name) { global $rss_channel, $currently_writing, $item_counter; $currently_writing = ""; if ($name == "ITEM") { $item_counter++; } } function characterData($parser, $data) { global $rss_channel, $currently_writing, $main, $item_counter; if ($currently_writing != "") { switch($main) { case "CHANNEL": if (isset($rss_channel[$currently_writing])) { $rss_channel[$currently_writing] .= $data; } else { $rss_channel[$currently_writing] = $data; } break; case "IMAGE": if (isset($rss_channel[$main][$currently_writing])) { $rss_channel[$main][$currently_writing] .= $data; } else { $rss_channel[$main][$currently_writing] = $data; } break; case "ITEMS": if (isset($rss_channel[$main][$item_counter][$currently_writing])) { $rss_channel[$main][$item_counter][$currently_writing] .= $data; } else { //print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>"); $rss_channel[$main][$item_counter][$currently_writing] = $data; } break; } } } switch ( $op ) { case "main": $url="http://www.moigorod.ru/uploads/rss/_headlines/news-main.xml"; $title_podr = "Основные новости"; break; case "sport": $url="http://www.moigorod.ru/uploads/rss/_headlines/news-sport.xml"; $title_podr = "Новости спорта"; break; case "delo": $url="http://www.moigorod.ru/uploads/rss/_headlines/news-biz.xml"; $title_podr = "Деловые новости"; break; case "boardm": $url="http://www.moigorod.ru/uploads/rss/_headlines/board-main.xml"; $title_podr = "Объявления"; break; case "wanted": $url="http://www.moigorod.ru/uploads/rss/_headlines/board-vac.xml"; $title_podr = "Вакансии"; break; case "resume": $url="http://www.moigorod.ru/uploads/rss/_headlines/board-res.xml"; $title_podr = "Резюме"; break; case "boys": $url="http://www.moigorod.ru/uploads/rss/_headlines/board-lovm.xml"; $title_podr = "Знакомства / Парни"; break; case "girls": $url="http://www.moigorod.ru/uploads/rss/_headlines/board-lovf.xml"; $title_podr = "Знакомства / Девушки"; break; case "city": $url="http://www.moigorod.ru/uploads/rss/_headlines/events-all.xml"; $title_podr = "Городские события"; break; case "catalog": $url="http://www.moigorod.ru/uploads/rss/_headlines/catalog-all.xml"; $title_podr = "Каталог фирм"; break; case "konkurs": $url="http://www.moigorod.ru/uploads/rss/_headlines/prizeclub-newcompet.xml"; $title_podr = "Конкурсы"; break; case "confer": $url="http://www.moigorod.ru/uploads/rss/_headlines/f2f-newconf.xml"; $title_podr = "Конференции"; break; default: $url="http://www.moigorod.ru/uploads/rss/_headlines/news-main.xml"; $title_podr = "Основные новости Хабаровска"; } // C этой строкой знаки вопроса // $xml_parser = xml_parser_create(); // С этой строкой вражеские кабалистические знаки $xml_parser = xml_parser_create('UTF-8'); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($url, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); //$pagetitle = "$title_podr"; // титлы, если не стоит автоматическая генерация $page_title = "$title_podr"; $hometext = "новости, события, лента новостей, Хабаровск, Хабаровский край, СНГ, $title_podr"; // Вывод в HTML include("header.php"); OpenTable(); echo "<p align=\"center\"><font size=\"3\"><b>Последние новости Хабаровска от moigorod.ru</b></font><br></p>"; print ("<center><i>" . $rss_channel["DESCRIPTION"] . "</i></center><br><br>"); echo"<hr size=\"1\" noshade color=\"#C5CDD6\">";//горизонтальная линия echo"<table width=\"100%\" border=\"0\">"; echo"<tr><td width=\"75%\" align=\"left\" valign=\"top\">";//левая таблица echo"<center><b>$title_podr</b></center><br><br>";//название раздела if (isset($rss_channel["ITEMS"])) { if (count($rss_channel["ITEMS"]) > 0) { for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) { print ("\n<table width=\"100%\" border=\"0\"><tr><td>$img<b><a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_blank\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</a></b><br>"); print (html_entity_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"])); print ("</td></tr></table><br>"); } } else { print ("<b>Нет новостей.</b>"); } } echo"</td>";//конец левая таблица echo"<td width=\"25%\" align=\"left\" valign=\"top\">";//правая таблица if (isset($rss_channel["IMAGE"])) { print ("<a href=\"" . $rss_channel["LINK"] . "\" target=\"_blank\"><img border=\"0\" src=\"" . $rss_channel["IMAGE"]["URL"] . "\" align=\"middle\" alt=\"" . $rss_channel["IMAGE"]["TITLE"] . "\"></a> <font size=\"3\"><br>" . $rss_channel["TITLE"] . "</font><br><br>"); } else { print ("<font size=\"3\">" . $rss_channel["TITLE"] . "</font><br><br>"); } $url_mod = "<a href=\"modules.php?name=News_Khabara&file=index&op"; echo"<b> $url_mod=main\">Основные новости</a><br> $url_mod=sport\">Новости спорта</a><br> $url_mod=delo\">Деловые новости</a><br> $url_mod=boardm\">Объявления</a><br> $url_mod=wanted\">Работа - Вакансии</a><br> $url_mod=resume\">Работа - Резюме</a><br> $url_mod=boys\">Знакомства - Парни</a><br> $url_mod=girls\">Знакомства - Девушки</a><br> $url_mod=city\">Городские события</a><br> $url_mod=catalog\">Каталог фирм и заведений</a><br> $url_mod=konkurs\">Новые конкурсы</a><br> $url_mod=konfer\">Конференции</a><br> </b><br><br>"; echo"</td></tr></table>";//конец правая таблица echo"</td></tr></table>";//конец блока новостей CloseTable(); include("footer.php"); ?>
Последний раз редактировалось Soniks, 01.02.2006 в 03:07.
|
|
|
|
|
|
|
|
|
|
01.02.2006, 03:04
ValeryL вы сначало посмотрите в какой кодировке идет сама rss? прото откройте ее в браузере.
|
|
|
|
|
|
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть". |
|
|
|
|
|
|
|
|
|
01.02.2006, 06:16
На сайте moigorod.ru дается утилита для чтения новостей. Если открывать в броузере то:
Не удается отобразить страницу XML
Не удается просмотреть ввод XML с использованием списка стилей XSL. Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.
--------------------------------------------------------------------------------
В текстовом комментарии обнаружен недопустимый знак.
Посему, ничего не могу сказать точнее. Но похоже, что сайт на движке textpattern? а на сколько я понимаю он использует юникод.
При обновлении выдает:
В текстовом комментарии обнаружен недопустимый знак. Ошибка при обработке ресурса ''http://www.moigorod.ru/uploads/rss/rss....
document.write(' <a href="http://www.liveinternet.ru/click;MoiGorod-ru" target="_blank"><img src="http://counter.ya...
|
|
|
|
|
|
|
01.02.2006, 18:40
Вот метод решения вашей проблемы:
после:
PHP код:
if ($currently_writing != "") {
добавьте:
PHP код:
$data = iconv("UTF-8","Windows-1251",$data);
соответственно в php библиотека iconv должнабыть установлена (что и есть на большинствах серверах, но на Денвере нету!)
|
|
|
|
|
|
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть". |
|
|
|
|
|
|
|
|
Опции темы |
Поиск в этой теме |
|
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:59.
|
|
|
|
|
|
|
|
|
|
|
|
|