Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодировка rss, крякозаблики в ответе 
:(
    Опции темы
student2008
Дата 25.1.2009, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 9.7.2008

Репутация: нет
Всего: нет



Код

<?php
function startElement($parser, $name, $attrs) {
global $tag, $rss;
if ($name == 'RSS')
$rss = '^RSS';
elseif ($name == 'RDF:RDF')
$rss = '^RDF:RDF';

$tag .= '^' . $name;
}

function endElement($parser, $name) {
global $tag;
global $itemCount, $items;
if ($name == 'ITEM') {
$itemCount++;
if (!isset($items[$itemCount])) $items[$itemCount] = array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => '');
}

$tag = substr($tag, 0, strrpos($tag, '^'));
}

function characterData($parser, $data) {
global $tag, $chanTitle, $chanLink, $chanDesc, $rss, $imgTitle, $imgLink, $imgUrl;
global $items, $itemCount;

$rssChannel = '';
if ($data) {
if ($tag == $rss . '^CHANNEL^TITLE') {
$chanTitle .= $data;
} elseif ($tag == $rss . '^CHANNEL^LINK') {
$chanLink .= $data;
} elseif ($tag == $rss . '^CHANNEL^DESCRIPTION') {
$chanDesc .= $data;
}
if ($rss == '^RSS') $rssChannel = '^CHANNEL';

if ($tag == $rss . $rssChannel . '^ITEM^TITLE') {
$items[$itemCount]['title'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^ITEM^LINK') {
$items[$itemCount]['link'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^ITEM^DESCRIPTION') {
$items[$itemCount]['desc'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^ITEM^PUBDATE') {
$items[$itemCount]['pubdate'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^IMAGE^TITLE') {
$imgTitle .= $data;
} elseif ($tag == $rss . $rssChannel . '^IMAGE^LINK') {
$imgLink .= $data;
} elseif ($tag == $rss . $rssChannel . '^IMAGE^URL') {
$imgUrl .= $data;
}
}

}

function parseRSS($url) {
global $tag, $chanTitle, $chanLink, $chanDesc, $rss, $items, $itemCount, $imgTitle, $imgLink, $imgUrl;
$chanTitle = '';
$chanLink = '';
$chanDesc = '';
$imgTitle = '';
$imgLink = '';
$imgUrl = '';
$tag = '';
$rss = '';

global $items, $itemCount;

$itemCount = 0;
$items = array(0 => array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => ''));

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

@$fp = fopen($url, "r");
$data = "";
while (true) {
@$datas = fread($fp, 4096);
if (strlen($datas) == 0) {
break;
}
$data .= $datas;
}

@fclose($fp);

if ($data != '') {
$xmlresult = xml_parse($xml_parser, $data);
$xmlerror = xml_error_string(xml_get_error_code($xml_parser));
$xmlcrtline = xml_get_current_line_number($xml_parser);

if ($xmlresult)
displayData();
else
print("Error parsing this feed !<br />Error: $xmlError , at line: $xmlCrtline");
} else {
print("Error while retriving feed $url");
}

xml_parser_free($xml_parser);
}

function displayData() {
global $chanTitle, $chanLink, $chanDesc, $rss, $items, $itemCount, $imgTitle, $imgLink, $imgUrl;
global $items, $itemCount;
?>
<html>
<head>
<title>NEWS</title>
</head>
<body>

<?php
for($i = 0;$i < count($items)-1;$i++) {
echo "<h4>1".$items[$i]['title']."</h4>";
echo "<h5>2".$items[$i]['pubdate']."</h5>";
echo "3<a href='".$items[$i]['link']."'>".$items[$i]['desc']."</a>";
}
}
?>
</body></html>

<?php

$url="http://feeds.feedburner.com/cl_news?format=xml";
parseRSS($url);
?>

беру новости с сайта http://feeds.feedburner.com/cl_news?format=xml, там они нормально читаются а у меня крякозяблики (пробовал брать rss с других сайтов там таже лабуда).
Подскажите пж где решение.
PM MAIL   Вверх
enof
Дата 25.1.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Новости в юникоде,а вы наверное в cp1251 пытаетесь отображать.
Код

header("Content-Type: text/html; charset=utf-8");

PM MAIL ICQ Skype   Вверх
student2008
Дата 25.1.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 9.7.2008

Репутация: нет
Всего: нет



enof, Спасибо.  
Я вот такую штуку использовать решил
Код

$a=iconv("UTF-8","windows-1251",$items[$i]['title']);
print "<h4>$a</h4>";

PM MAIL   Вверх
skyboy
Дата 25.1.2009, 11:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



не лучшее решение: символов в исходной кодировке всяко больше. тогда уж добавь к указанию исходящей кодировки "//IGNORE", а то у тебя, скажем, символ греческого алфавита(вполне может оказаться в заголовке новости) прервет конвертирование.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.