Pomoć - Pretraga - Članovi - Kalendar
Puna verzija: Kreiranje .xml fajla za .rss (non-eng. znakovi ?)
Dizajn Zona > Tehnike > Server scripting
luigi7up
Bok, ljudi,
imam problem sa generiranjem .XML fajla koji treba služiti kao RSS feed. Skripta koja otvara XML fajl i puni ga feedovima radi super dok ne dođe potreba za čćđš slovima. Feed u kojem su slova čćđš nije validan. Skripta izgleda ovako:
CODE
$query = "SELECT naslov,friendly_url,kratki_opis from blog where objavljeno='1'";
        $baza->db_query($query);        
$rss_items  = $baza->query_result;        
$rss_output.="<?xml version='1.0'  encoding='utf-8'?>        
                        <rss version='2.0'>
                        <channel>
                            <title>NAslov feeda/title>
                            <link>http://www.link.hr</link>
                            <description>Sve sto je novo na sajtu saznaj odmah :)</description>";
                            foreach($rss_items as $item)
                            {
                                $rss_output.="<item><title>$item[naslov]</title><link>"._ROOT."blog/$item[friendly_url]</link>
<description>$item[kratki_opis]</description></item>";
                            }
                            
        $rss_output.="</channel>
                    </rss>";
                            
        $file=fopen($filename,'wb');    
        fwrite($file, utf8_encode(($rss_output)));
        fclose($file);




RSS Validator mi daje slijedeće greške:

This feed does not validate.

*

line 6, column 359: Undefined named entity: Auml (97 occurrences) [help]

... godine. Bilo je tu ups and downowa, svaÄ\x91a, veselja, a projekt se ...
^

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

*

line 6, column 365: description contains bad characters (44 occurrences) [help]

... e. Bilo je tu ups and downowa, svaÄ\x91a, veselja, a projekt se Ä ...



PHP funkcija utf8_encode() pretvori znakove u utf-8 ekvivalente, ali ako otvorim feed u, recimo, firefoxu vidim samo naslov kanala, njegov opis i link. <item-i> se uopće ne prikazuju! AKo nema ćčđš slova, feed je OK. Pokušao sam se poigrati sa funkcijom htmlspecialchars(), ali ni s njom nisam imao sreće.
Ako je netko od vas uspio izgenerirati .XML fajl za rss feed koji radi sa ne-engleskim znakovima neka mi molim vas pomogne jer su sati i sati već otišli u nepovrat smile.gif

Hvala,
Luka
ivanhoe
cek, a kad uradis direktno echo, da li ih prikaze korektno?

mozda i server ne salje dobre headere, probaj da posaljes:
CODE
header('Content-Language: sr');
header('Content-Type: text/xml; charset=utf-8 ');
luigi7up
Nisam siguran da shvaćam kako poslat header jer se ne radi o echo-u html fajla na ekran. Ako pogledaš skriptu vidjet ćeš da php otvori .xml faj stvai u njega sadržaj i zatvori ga. Što da učinim s headerima u tom slučaju???

Hvala
luigi7up
Uspio sam napraviti validan rss 2.0 .xml fajl sa ne-engleskim znakovima. U pravilu je jako jednostavno. Sve xml elemente koji sadrže čćđšž slova ili html tagove treba provući samo kroz funkciju htmlspecialchars(). Znači ne treba koristiti funkciju utf8_encode(). Evo moje skripte ako ikada ikome zatreba:
CODE
$rss_output.="<?xml version='1.0'  encoding='utf-8'?>        
                        <rss version='2.0'>
                        <channel>
                            <title>Naslov feeda</title>
                            <link>http://www.link.com</link>
                            <description>Sve sto je novo na sajtu saznaj odmah :)</description>";
                            
                            //Ispisuje blog entry-e u rss fajl
                            foreach($rss_blog_items as $item)
                            {
                                $rss_output.="<item><title>Iz bloga: $item[naslov]</title><link>"._ROOT."blog/$item[friendly_url]</link><description>".htmlspecialchars($item[kratki_opis])."</description></item>";
                            }

                            
        $rss_output.="</channel>
                    </rss>";
ivanhoe
CITAT (luigi7up @ Dec 27 2007, 10:47) *
Nisam siguran da shvaćam kako poslat header jer se ne radi o echo-u html fajla na ekran. Ako pogledaš skriptu vidjet ćeš da php otvori .xml faj stvai u njega sadržaj i zatvori ga. Što da učinim s headerima u tom slučaju???

Hvala



a. mozes da koristis .htaccess da kazes apachu koji enkoding da koristi
b. opet sa .htaccess i mod_rewrite mozes taj feed da serviras pomocu php skripte koja ce da posalje odgovarajuce headere i onda da uradi echo rss fajla

nije ni bitno posto si resio poblem, ali ako ti zatreba objasnjenje za ovo gore, pitaj...
luigi7up
Hvala za objašnjenje unatoč tomu što je problem riješen. RESPECT!
Inače, pokušao sam u .htaccess staviti AddDefaultCharset UTF-8 ne bi li enkodirao fajl u utf-8, ali izgleda da je nepotrebno jer ako svoj fajl .xml otvorim u nekom editoru izgleda da je sačuvan u utf-8 without bom tako da je očito da PHP pri otvaranju-zapisivanju-zatvaranju fajla ne remeti enkodiranje. U svakom slučaju HVALA
Ovo je "lo-fi" verzija našeg glavnog sadržaja. Da biste videli punu verziju, sa svim informacijama, formatiranjem ili slikama, molimo vaskliknite ovde.
Invision Power Board © 2001-2013 Invision Power Services, Inc.