| halkfild |
02.11.2007 00:56 |
коряво но нормально парсит.. /*з.ы. исправлял старый скрипт.. мо сейчас отлажу и уберу лишнее*/
PHP код:
<?php
error_reporting(0);
$xmls="http://www.securitylab.ru/_Services/Export/RSS/news.php";
$news = array();
$currentNews = null;
$index = null;
function saxStartElement($parser,$name,$attrs)
{
global $currentNews,$index,$l,$type;
switch($name)
{
case 'channel':
$news = array();
break;
case 'item':
$currentNews = array();
break;
default:
$index = $name;
break;
};
}
function saxEndElement($parser,$name)
{
global $news,$currentNews,$index, $l,$type,$ii,$index;
$l[$name]=$currentNews[$name];
if ((is_array($currentNews) && ($name=='item')))
{
$news[] = $currentNews;
$currentNews = null;
};
$index = null;
$ii++;
}
function saxCharacterData($parser,$data)
{
global $currentNews,$index,$l;
if ((is_array($currentNews)) && ($index))
$currentNews[$index] = $data;
}
$parser = xml_parser_create();
xml_set_element_handler($parser,'saxStartElement','saxEndElement');
xml_set_character_data_handler($parser,'saxCharacterData');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,false);
$xml = join('',file($xmls));
if (!xml_parse($parser,$xml,true)) die(sprintf('<div align=center><font size=2 face=verdana color=red>не прошел коннект</font></div>',
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
xml_parser_free($parser);
foreach($news as $n)
{
echo $n['title']." - ".$n['link']." - ".$n['description']." - ".$n['pubDate']."<br><br>";
}
?>
насчет преобразования с utf8-->cp1251 использовал раньше
PHP код:
function utf8tocyr($string) {
$result="";
for ($c = 0; $c < strLen($string); $c=$c+2) {
$ub = ord(subStr($string, $c, 1));
$lb = ord(subStr($string, $c+1, 1));
if ($ub == 208) {
if ($lb != 81) {
$result = $result.chr($lb + 48);
}
else {
$result = $result.'Ё';
}
}
if ($ub == 209) {
if ($lb != 91) {
$result = $result.chr($lb + 112);
}
else {
$result = $result.'ё';
}
}
if (($ub != 208) AND ($ub != 209) AND ($lb != 91) AND ($lb != 81)) {
$result = $result.chr($ub);
$c = $c-1; }
}
return $result;
}
|