mboost-dp1

Danske bogstaver i RSS


Gå til bund
Gravatar #1 - markjensen
14. maj 2010 19:43
Hej :)

På min hjemmeside har jeg en RSS-funktion som indtil for nylig har fungeret fint. Nu har jeg dog det problem at Firefox ikke længere kan indlæse det, og kører jeg RSS'en igennem validator.w3.org får jeg da også fejl.

Det ser ud til at være en fejl med et å, men jeg kan ikke forstå hvorfor det pludselig er et problem, for der er andre å'er som den ikke melder fejl ved og som har virket fint tidligere.

Den melder også en fejl om at RSS'ens URL ikke er den samme som den der står i selve RSS'en, men det kan jeg ikke helt få til at passe, for jeg synes nu ellers der står det samme.

Fejlene kan ses ved at følge linket.

Er der en der kan gennemskue problemet?

På forhånd tak :)


Mark
Gravatar #2 - arne_v
14. maj 2010 19:46
#1

Vi skal jo nok have lidt flere detaljer. F.eks. fejlmeddelelser.

Et gæt kunne være et ISO-8859-1 å i noget som er labeled som UTF-8.
Gravatar #3 - markjensen
14. maj 2010 20:04
Argh, den har fjernet mit link. Nå, her er det igen:

http://validator.w3.org/feed/check.cgi?url=http%3A...

Prøver lige med link-tag igen: link

Hvorfor virker det ikke? :S

Nå, http://validator.w3.org/
og
http://smilinger.dk/image_rss.php
Gravatar #4 - Frandsen
14. maj 2010 21:10
Dine "snyde" ÆØÅ-koder fejler med start linie 21.
Skriv alt indhold i feedet med normale karakterer, intet behov for at konvertere dem.

Sender du headers?

header("Content-Type: application/xml; charset=utf-8");
header("Content-Encoding: gzip"); **
header("Content-Length: " . strlen($contents));

** Hvis du bruger komprimering, som man vel altid gør :)?
Gravatar #5 - markjensen
14. maj 2010 21:16
#4 Mener ellers bare jeg havde problemer da jeg lavede det med normale karakterer (det er ved at være ret lang tid siden - hvorfor har det virket indtil nu?)
Gravatar #6 - Frandsen
14. maj 2010 21:49
Mht. karakterer er det højst sandsynligt pga. manglende headers. Indtil jeg fik sendt de rigtige havde jeg samme problemer. Man kan sige du modsiger dig selv, forstået på den måde at UTF-8 tegnsættet indeholder alle de karakterer du overhoved har brug for, men alligevel konverterer du dem om.
Afhængig af hvor lang tid siden du har roddet med det sidst, kan det være at både w3s samt Firefoxes indbyggede validator er blevet opdateret og nu kan spotte dine "slemme tricks" :)
Gravatar #7 - Daniel-Dane
14. maj 2010 22:18
#4
Burde det ikke være nok med at give charsettet i dokumentet?
Gravatar #8 - markjensen
14. maj 2010 22:31
#6 Men jeg har jo andre å'er i samme dokument (også i lowercase). Jeg prøver at kigge på det i morgen. Er lidt for træt lige nu
Gravatar #9 - Frandsen
14. maj 2010 22:40
#7
Det skulle man tro jo, men PHP sender pr. default som text/html og det kan derfor forstyre feedet. Måske virker det i en browser, men kan fucke med dedikerede RSS Readers. Derfor, før det virker over hele linien, skal der sendes headers.
Char. Encoding er det samme, hvis PHP defaulter noget andet end ventet der fucker med feedet.
Det er op til den enkelte browser/reader hvor sart den er.
Gravatar #10 - markjensen
14. maj 2010 22:57
Jeg sender denne header:

header("Content-type: application/rss+xml")
Gravatar #11 - Windcape
15. maj 2010 16:01
#10

Jeg for følgende fejl fra Visual Studio:

Entity 'eacute' not defined.


Fra følgende kode:


<title>P&#229; caf&eacute;</title>


Så jeg synes du skal læse og lære om entities: http://www.xml.com/pub/a/2001/01/31/qanda.html

Og generelt bruge CDATA til alt tekst!
Gravatar #12 - onetreehell
15. maj 2010 17:34
Wat. Nu er det et stykke tid siden jeg har arbejdet med xml, men er CDATA ikke en del af SGML? :)
Gravatar #13 - arne_v
15. maj 2010 17:37
#12

Det er en del af XML's subset af SGML.

Og praktisk for at få meget snasket indhold nemt ind i XML.
Gravatar #14 - arne_v
15. maj 2010 17:37
#11 & 13

Mne jeg ville ikke bruge CDATA medmindre at det er nødvendigt.
Gravatar #15 - Windcape
15. maj 2010 18:55
#14

Du ved ikke nødvendigvis om det er nødvendigt, derfor virker det fornuftigt til alt tekst input.

Alternativet er at undgå entities totalt, men det er lidt urealistisk!
Gravatar #16 - markjensen
15. maj 2010 19:33
Åbenbart kan den ikke finde ud af entities med navne, men når jeg erstatter dem med talværdierne, så kan den godt finde ud af det. Det var det jeg havde gjort med æøå, men det gav så et problem med eacute (som jeg ikke havde sat den til at erstatte før nu).

I min database er de specielle bogstaver gemt som &aring;, &oslash; osv. Ved I om der er en php-funktion der kan erstatte disse med entities med talværdier? Lige nu gør jeg det med str_replace, men det ville da være dejligt ikke at skulle holde øje med det hele tiden (selvom der sjældent kommer nye ting og meget sjældent mere eksotiske bogstaver end dem jeg har nu).
Gravatar #17 - myplacedk
16. maj 2010 07:47
Når nu du alligevel laver om i det, hvorfor så ikke lave om til det rigtige?
Gravatar #18 - Windcape
16. maj 2010 08:46
markjensen (16) skrev:
Åbenbart kan den ikke finde ud af entities med navne, men når jeg erstatter dem med talværdierne, så kan den godt finde ud af det
Jeg gav dit et link som forklarede det.... Som også forklarer hvordan du kunne supportere dem.

Læs linket?

markjensen (16) skrev:
I min database er de specielle bogstaver gemt som &aring;, &oslash; osv.
Hvorfor er de det?

Hvorfor bruger du ikke bare UTF8 ligesom alle andre, og stopper med at konvertere alting til unødvendige entities?
Gravatar #19 - markjensen
16. maj 2010 09:32
Windcape (18) skrev:
Jeg gav dit et link som forklarede det.... Som også forklarer hvordan du kunne supportere dem.


Jeg har læst linket, men det lyder som om at der er nogle som parseren altid forstår:
"You're not restricted to just the five named character entities covered above."
Men det er måske ikke det de mener? Jeg har taget udgangspunkt i newz' RSS, som ikke indeholder nogle erklæringer om eksterne/ekstra entities.



Windcape (18) skrev:
Hvorfor er de det?


Fordi jeg gik ud fra at htmlentities som standard konverterede til det som alle andre bruger, men jeg kan godt se at det åbenbart ikke er UTF8.


Medmindre at UTF8 er meget bedre end ISO-8859-1, så kan jeg vel lige så godt holde alt i ISO-8859-1 nu når databasen gemmes med disse entities.
Gravatar #20 - myplacedk
16. maj 2010 09:39
#19

Det lyder som om du roder en del rundt i det.

1) Databasen skal ikke indeholde HTML-entities, medmindre det faktisk er HTML du har i databasen.

2) Hvis databasen er i latin1 (iso-8859-1), så er det nemmest hvis dit RSS-feed også er det.

3) Hvis din database og dit RSS-feed ikke har samme tegnsæt, må du sørge for at konvertere.

Så: Vælg format og tegnsæt til både database og RSS-feed, og overhold dem.

(Og hvis din kilde (databasen) alligevel er i latin1, kan jeg ikke se nogen fordel ved utf8.)
Gravatar #21 - markjensen
16. maj 2010 09:56
myplacedk (20) skrev:
1) Databasen skal ikke indeholde HTML-entities, medmindre det faktisk er HTML du har i databasen.

Det var nu egentlig bare for at holde databasen uden specielle karakterer, fordi jeg tænkte at hvis dne indeholder entities, så kan disse altid pege på forskellige tegn, alt efter hvilket tegnsæt man ønsker at bruge.

myplacedk (20) skrev:
2) Hvis databasen er i latin1 (iso-8859-1), så er det nemmest hvis dit RSS-feed også er det.

Ja, det var også det jeg kom frem til.


Er der noget i vejen med ikke at udskrive specielle karakterer som entities, så længe jeg angiver det brugte tegnsæt? Det virker fint, men er det en dårlig idé?
Gravatar #22 - markjensen
16. maj 2010 10:09
markjensen (21) skrev:
Det var nu egentlig bare for at holde databasen uden specielle karakterer, fordi jeg tænkte at hvis dne indeholder entities, så kan disse altid pege på forskellige tegn, alt efter hvilket tegnsæt man ønsker at bruge.


Men jeg kan godt se at dette ikke giver specielt meget mening når databasen jo i sig selv er indkodet i noget.
Gravatar #23 - Windcape
16. maj 2010 10:40
myplacedk (20) skrev:
Og hvis din kilde (databasen) alligevel er i latin1, kan jeg ikke se nogen fordel ved utf8.
Modsat så er det en bedre ide altid at have ALTING i unicode.

markjensen (21) skrev:
Det var nu egentlig bare for at holde databasen uden specielle karakterer, fordi jeg tænkte at hvis dne indeholder entities, så kan disse altid pege på forskellige tegn, alt efter hvilket tegnsæt man ønsker at bruge.
Du har stadigvæk ikke forstået character encodings i deres grundliggende forstand.

Der er altså noget at læse op på her.
Gravatar #24 - markjensen
16. maj 2010 10:43
#23 Se min næste post.
Er der overlap mellem de mest udbredte bogstaver?
Gravatar #25 - Windcape
16. maj 2010 10:48
#24

Vi kan jo starte med at æøå faktisk er en del af unicode, modsat ASCII ;)

Holder du alting i UTF8, så opstår der aldrig problemer. Simple as, really.
Gravatar #26 - markjensen
16. maj 2010 10:53
#25 Nu var det mere utf8 og latin1 jeg tænkte på :). Men jeg spørger lige igen. Er der nogen fordel i at bruge entities i forhold til bare at bruge tegnene?
Gravatar #27 - Windcape
16. maj 2010 11:35
markjensen (26) skrev:
Er der nogen fordel i at bruge entities i forhold til bare at bruge tegnene?
Ingen, overhovedet.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login