|
|
|
| Здравствуйте. Я эту тему уже поднимал, но она затерлась и я так и не получил ответа.
Я хочу разместить на сайте RSS новости к примеру с Яндекса. Для этого мне на этот же форму дали скрипт
<?php
$text = file_get_contents("адрес rss");
if($text)
{
$Months=array('Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04', 'May'=>'05', 'Jun'=>'06', 'Jul'=>'07', 'Aug'=>'08', 'Sep'=>'09','Oct'=>'10','Nov'=>'11','Dec'=>'12');
$Days=array('Mon'=>'Пн', 'Tue'=>'Вт', 'Wed'=>'Ср', 'Thu'=>'Чт', 'Fri'=>'Пт', 'Sat'=>'Сб', 'Sun'=>'Вс');
$pattern = "/<item>(.*?)<\/item>/ims";/* регулярное выражения для выбора данных между двумя тегами <item></item>*/
preg_match_all($pattern, $text, $array);
$patt1 = "/<title>(.*?)<\/title>/ims";/*Заголовок новости*/
$patt2 = "/<description>(.*?)<\/description>/ims";/*тело новости*/
$patt3 = "/<pubDate>(.*?)<\/pubDate>/ims";/*дата публикации*/
$patt4 = "/<link>(.*?)<\/link>/ims";/*ссылка на сайт новостей*/
$i=0;
foreach ($array[1] as $v){
preg_match_all($patt1, $v, $temp);
$news[$i]['title'] = $temp[1][0];
preg_match_all($patt2, $v, $temp);
$news[$i]['description'] = html_entity_decode($temp[1][0]);
/*php автоматически переконвертил html символы поэтому вернем все обратно :)*/
preg_match_all($patt3, $v, $temp);
$news[$i]['pubDate'] = $temp[1][0];
preg_match_all($patt4, $v, $temp);
$news[$i]['link'] = urldecode($temp[1][0]);
$i++;
}
foreach ($news as $v){
foreach($Days as $EngName => $RusName)
$v['pubDate']=str_replace($EngName, $RusName, $v['pubDate']);
foreach($Months as $EngName => $RusName)
$v['pubDate']=str_replace($EngName, $RusName, $v['pubDate']);
$v['link']=str_replace(адрес страницы с файлом rss, $v['link']);
$v['pubDate']=str_replace(GMT, "", $v['pubDate']);
$v['pubDate']=rtrim($v['pubDate']);
echo "<div class=news_title><br><a href=".$v['link'].">".$v['title']."</a></div><a class=answers>".$v['description']."<font color='#666666'> [".$v['pubDate']."]";
}
}
?>
|
Он все делает правильно, кроме одного. Выводит текст ссылки верно, а вот адрес, тот адрес куда мы должны перейти нажав на текст ссылки он указывает неправильно. В чем может быть причина? Где и что нужно исправить?
Заранее благодарен. | |
|
|
|
|
|
|
|
для: Mefisto84
(18.01.2007 в 21:01)
| | Кажется мне, что могли преобразоваться символы кое какие
Может стоит попробовать
str_replace ('&', '&', urldecode ($temp[1][0]));
|
Так как при get запросе ет нехорошо) | |
|
|
|
|
|
|
|
для: bronenos
(18.01.2007 в 22:59)
| | Нет, вы меня не поняли, с кодировкой там все нормально. Он почему то в ссылке на новость пишет адрес моего же сайта. То есть в ссылке вместо <a href="yandex...."> так как новости я беру с яндекса, он пишет там адрес моего сайта. Почему? | |
|
|
|
|
|
|
|
для: Mefisto84
(19.01.2007 в 19:38)
| | Все, наконец-то сам разобрался, оказывается все портила строчка
$v['link']=str_replace(адрес страницы с файлом rss, $v['link']);
|
убрал её - проблемы исчезли. Всем спасибо. | |
|
|
|
|
|
|
|
для: Mefisto84
(19.01.2007 в 20:25)
| | у меня в этой же теме другой вопрос:
кодировка не всегда нормальная.
например: http://redtram.ru/rss2/top100/1h/showbiz/other/feed.xml
он не понимает нормально. как лечить? знаю,что куда-то надо iconv впихнуть.а вот куда... | |
|
|
|
|
|
|
|
для: mozhunt
(22.01.2007 в 01:42)
| | проблема снята.
надо было сделать примерно так:
preg_match_all($patt1, $v, $temp);
$news[$i]['title'] = iconv('UTF-8', 'CP1251', $temp[1][0]);
preg_match_all($patt2, $v, $temp);
$news[$i]['description'] = iconv('UTF-8', 'CP1251', html_entity_decode($temp[1][0])); | |
|
|
|