Avatar billede gil-galad Nybegynder
04. januar 2006 - 15:37 Der er 10 kommentarer og
2 løsninger

Tvinge XML-feed til bestemt encoding?

Hej

Jeg har en rss-parser i php, der skal bruge nedenstående xml-fil.

http://www.astronomibladet.dk/_index.xml

Det har virket indtil nu, men da serveren blev opgraderet til php5 virker det ikke mere ikke mere.

Spørgsmålet er fortsat herfra: http://exp.dk/spm/669611 og det handler om hvordan jeg får mit php-script til at tolke dokumentet som den encoding der nu engang skal til for at få vist ÆØÅ korrekt...

Dokumentet kan ses her: http://www.astronomibladet.dk/_index.xml

Koden jeg udskriver inholdet med:
    require('filer/rss/rss_fetch.inc');
    $oldLevel = ini_get('error_reporting');
    error_reporting($oldLevel ^ E_USER_WARNING);
    $rss = fetch_rss('http://www.astronomibladet.dk/_index.xml');
    error_reporting($oldLevel);
    if( $rss != false ){
      foreach ($rss->items as $item) {
        $description=preg_replace('/<img src="\s*(\.\.|http:\/\/www\.astronomibladet\.dk)?\//i','<img alt="Nyheder fra astronomibladet" src="http://www.astronomibladet.dk/',$item['description']);
        $description = strip_tags($description,'<img>');
        echo "<div class=\"nyheder\"><b>".$item['title']."</b><br>".$description."<div style=\"text-align: right; clear: both;\"><a href=\"".$item['link']."\" target=\"_blank\">Klik her for at læse mere</a></div></div><img src=\"grafik/streg.gif\" alt=\"\" class=\"streg\">";
      }
    }else{echo "<br><br>En midlertidig fejl opstod.";}
Avatar billede Slettet bruger
04. januar 2006 - 15:40 #1
Hvilket charset skal det tvinges til?

Jeg er ikke sikker på man kan gøre det, men php har nogle hjælpefunktioner til encoding, blandt andet http://dk.php.net/utf8_encode - måske kan du køre det på elementerne.
Avatar billede gil-galad Nybegynder
04. januar 2006 - 15:43 #2
Netop det har jeg ingen anelse om.

janegil skriver i den gamle tråd:
"Den ene har angitt iso-8859-1 encoding eksplisitt i xmlheaderen, den andre ikke. (Ingen av dem angir encoding i HTTP-headeren.)

Begge ER iso-8859-1 men den ene blir forsøkt tolket som utf-8."
Avatar billede olebole Juniormester
08. januar 2006 - 16:50 #3
<ole>

Nej, janegil har fuldstændig ret ... hvad får dig til at tro, de begge har angivet 'iso-8859-1' som tegnsæt?  :)

I http://www.astronomibladet.dk/index.xml anføres 'iso-8859-1' som encoding - og her burde det altså ikke volde problemer at få vist skandinaviske tegn korrekt.

Ved http://www.astronomibladet.dk/_index.xml er der derimod ikke associeret et tegnsæt - og der er iøvrigt tale om invalid XML.

/mvh
</bole>
Avatar billede gil-galad Nybegynder
08. januar 2006 - 19:57 #4
"Ved http://www.astronomibladet.dk/_index.xml er der derimod ikke associeret et tegnsæt - og der er iøvrigt tale om invalid XML."

Kan jeg på nogen måde kode mig uden om den fejl? Fejlen indtrådte først da serverens PHP-version blev opgraderet til PHP5.

For det er nok ikk realistisk at de vil ændre den... Har mailet dem.
Avatar billede gil-galad Nybegynder
08. januar 2006 - 19:57 #5
"Kan jeg på nogen måde kode mig uden om den fejl? Fejlen indtrådte først da serverens* PHP-version blev opgraderet til PHP5. "

*Mit webhotels server.
Avatar billede gil-galad Nybegynder
11. januar 2006 - 12:44 #6
Ingen der kan hjælpe stakkels mig?
Avatar billede olebole Juniormester
12. januar 2006 - 20:26 #7
Fejlen i http://www.astronomibladet.dk/_index.xml ligger på astronomibladet.dk - og er ikke afhængig af andre servere. Det kan du kun ændre på - med mindre du har adgang til at ændre deres feed  :)
Avatar billede gil-galad Nybegynder
12. januar 2006 - 20:43 #8
Jeg kan ikke komme udenom?


Nå, men smid et svar, så prøver jeg at maile dem igen...
Avatar billede olebole Juniormester
12. januar 2006 - 20:58 #9
Problemet i det pågældende feed (som det ser ud i skrivende stund), er bl.a. dette element:
    <title>Mælkevejen en kannibalgalakse</title>

Du kan evt. prøve at kalde dokumentet direkte i IE, som øjeblikkeligt brækker sig - fuldstændig, som den skal.
FF er derimod betydelig mere sloppy på visse punkter (herunder XML-håndtering) - og den viser (en fejl-fortolkning af) dokumentet.

Er der ikke angivet et tegnsæt, skal en XML-fortolker gå udfra, der er tale om UTF-8. I så tilfælde skal det ulovlige tegn 'æ' escapes som CDATA - og elementet se sådan ud:
    <title><![CDATA[Mælkevejen en kannibalgalakse]]></title>

Hvis du har kunnet parse dokumentet under PHP4, må PHP4's XML-parser være buggy - og det eneste rigtige vil være at få udgiveren af RSS'en til at ændre sin kode til valid XML  :)
Avatar billede gil-galad Nybegynder
12. januar 2006 - 21:04 #10
Jeg har mailet dem og bedt dem sætte encodingen som iso-8859-1 

Dette skulle løse problemet, ikke?
Avatar billede olebole Juniormester
12. januar 2006 - 21:33 #11
Jo, enten i dokumentet - eller med en HTTP-header  :)
Avatar billede gil-galad Nybegynder
18. januar 2006 - 19:35 #12
Jeg løste ved at finde en anden rss-parser, der kunne ændre encodingen selv.
Vi deler point
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester