Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Новости
 
 автор: Mefisto84   (18.01.2007 в 21:01)   письмо автору
 
 

Здравствуйте. Я эту тему уже поднимал, но она затерлась и я так и не получил ответа.
Я хочу разместить на сайте 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']."]";  
}  

?>  


Он все делает правильно, кроме одного. Выводит текст ссылки верно, а вот адрес, тот адрес куда мы должны перейти нажав на текст ссылки он указывает неправильно. В чем может быть причина? Где и что нужно исправить?
Заранее благодарен.

   
 
 автор: bronenos   (18.01.2007 в 22:59)   письмо автору
 
   для: Mefisto84   (18.01.2007 в 21:01)
 

Кажется мне, что могли преобразоваться символы кое какие
Может стоит попробовать

str_replace ('&amp;', '&', urldecode ($temp[1][0]));

Так как при get запросе ет нехорошо)

   
 
 автор: Mefisto84   (19.01.2007 в 19:38)   письмо автору
 
   для: bronenos   (18.01.2007 в 22:59)
 

Нет, вы меня не поняли, с кодировкой там все нормально. Он почему то в ссылке на новость пишет адрес моего же сайта. То есть в ссылке вместо <a href="yandex...."> так как новости я беру с яндекса, он пишет там адрес моего сайта. Почему?

   
 
 автор: Mefisto84   (19.01.2007 в 20:25)   письмо автору
 
   для: Mefisto84   (19.01.2007 в 19:38)
 

Все, наконец-то сам разобрался, оказывается все портила строчка

$v['link']=str_replace(адрес страницы с файлом rss, $v['link']);  

убрал её - проблемы исчезли. Всем спасибо.

   
 
 автор: mozhunt   (22.01.2007 в 01:42)   письмо автору
 
   для: Mefisto84   (19.01.2007 в 20:25)
 

у меня в этой же теме другой вопрос:
кодировка не всегда нормальная.
например: http://redtram.ru/rss2/top100/1h/showbiz/other/feed.xml

он не понимает нормально. как лечить? знаю,что куда-то надо iconv впихнуть.а вот куда...

   
 
 автор: mozhunt   (22.01.2007 в 01:55)   письмо автору
 
   для: 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]));

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования