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

Форум PHP

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

 

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

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

тема: кодировки в rss
 
 автор: streloc   (11.07.2006 в 16:34)   письмо автору
 
 

Не могу понять. Получаю RSS в кодировке UTF-8 хотя в xml стоит windows-1251.
Как переконвертировать в windows-1251?


<?php
set_time_limit
(0);

$file "http://cnews.ru/news.xml";

$rss_channel = array();
$currently_writing "";
$main "";
$item_counter 0;

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;
        }
    }
}

$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");
if (!(
$fp fopen($file"r"))) {
    die(
"could not open XML input");
}

while (
$data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($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);

// output as HTML
print ("<html><head><title>PHP RSS Reader</title></head><body>");


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>&nbsp;&nbsp;<font size=\"5\">" $rss_channel["TITLE"] . "</font><br><br>");
} else {
    print (
"<font size=\"5\">" $rss_channel["TITLE"] . "</font><br><br>");
}
print (
"<i>" $rss_channel["DESCRIPTION"] . "</i><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=\"1\"><tr><td width=\"100%\"><a href=\"" $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_blank\"><h4>" $rss_channel["ITEMS"][$i]["TITLE"] . "</h4></a></b>");
            print (
"<i>" html_entity_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"]) . "</i>");
            print (
"</td></tr></table><br>");
        }
    } else {
        print (
"<b>There are no articles in this feed.</b>");
    }
}
print (
"</body></html>");
?>

   
 
 автор: cheops   (11.07.2006 в 22:38)   письмо автору
 
   для: streloc   (11.07.2006 в 16:34)
 

Функции для работы с XML автоматически переконвертируют всё в UTF-8, следует конвертировать результат при помощи фукцнии utf8_decode().

   
 
 автор: streloc   (12.07.2006 в 10:18)   письмо автору
 
   для: cheops   (11.07.2006 в 22:38)
 


print ("\n<table width=\"100%\" border=\"1\"><tr><td width=\"100%\"><a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_blank\"><h4>" . utf8_decode($rss_channel["ITEMS"][$i]["TITLE"]) . "</h4></a></b>");


После этого все РУССКИЕ буквы-крякозябры превратились в знаки вопросов.

   
 
 автор: streloc   (12.07.2006 в 12:56)   письмо автору
 
   для: streloc   (12.07.2006 в 10:18)
 

Неужели никто не знает? А функция utf8_decode() преобразкет в ISO-8859-1

   
 
 автор: cheops   (12.07.2006 в 14:45)   письмо автору
 
   для: streloc   (12.07.2006 в 10:18)
 

Приведите пример букв-кракозябликов, как они выглядят?

   
Rambler's Top100
вверх

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