Fehler bei RSS-Feed (PHP+MySQL)

Hallöchen,

habe mir zu dieser späten/frühen Stunde einen RSS-Feed mit PHP und MySQL gebastelt.

Wenn man dem Quelltext glauben schenken darf funktioniert das auch alles schön so wie es soll…
Aber in der Feed-Ansicht (bei Firefox… Chrome zeigt ja den XML Code) kommt nichts :susp: .

Finde nicht herraus ob ich jetzt irgendwo etwas vergessen hab (typischer Fehler ja…).
Denke hier hat doch schonmal jemand sowas gemacht und ich bin nicht der Erste mit dieser Schnapp’s-Idee.

Hier der Pastebin-Link zum Code:
pastebin.com/zsxhT6wx

hm, hast du das online, so das man sehen kann, warum es evt. nicht funktioniert?
Zudem sollte man ausgaben in XML (oder HTML) mit htmlspecialchars() versehen.
und da du utf-8 nutzt, solltest du evt statt substr und strlen und so, die multibyte funktionen nutzen: mb_strlen, mb_substr, mb_strpos etc. Dort muss man dann nur noch extra das Encoding angeben, aber so hast du dann nachher keine „halben“ Umlaute oder sowas.
dann sehe ich unter in der while Schleife eine schließende spitze Klammer zu viel:

Ja ist Online Verfügbar.
Der obrige Code war einfach der Standardaufbau eines RSS-Feeds den ich mit PHP versehen hatte…

Hier mal live:
antribute.eu/rss.php

Laut Chrome verbuggt. Was ich sehr komisch finde das gleicher Code, anderer Inhalt:
mc.antribute.eu/rss.php

richtig funktioniert. Feedreader zeigen beides an.
Deine anmerkung zur Spitzen Klammer… das fiel mir schon auf und wurde beseitigt :slight_smile:.

Was diese Multibyte Funktionen angeht, nehme ich an funktioniert genauso wie die normalen substr/strlen?

Und wie genau meinst du das mit htmlspecialchars()? Wo genau sollte ich es einsetzten?

Da Script total umgebaut wurde hier der neue Code:
pastebin.com/wBi55yLn

Opera sagt jetzt zumindest, daß die verwendete Entität ü nicht definiert ist, was bei RSS
auch kein Wunder ist, die gibt es nur bei (X)HTML.
Auch der Validator mäkelt dieses und weitere Entitäten an - es ist ja auch keine DTD angegeben,
worin die definiert sein könnten und auch keine seitenspezifische Erweiterung der DTD.

Bei UTF-8 kannst du Umlaute doch einfach so hinschreiben. Und bei Zeichen, die du nicht direkt
eingeben kannst oder magst, mußt du als Entität eben den numerischen Wert nachschlagen und
verwenden.

Des Weiteren haben die Kommentare eine falsche Syntax.

<title>Antribute.eu</title> // Feed Titel <language>de</language> // Language <link>http://antribute.eu</link> // Adresse woher der Feed kommt <description>Pay you Tribute to the Chaos ~ Next Generation beginn</description> // Beschreibung des Feeds
http://de.selfhtml.org/xml/regeln/tagsattrwerte.htm#kommentare

[quote=„hoffmann“]Opera sagt jetzt zumindest, daß die verwendete Entität ü nicht definiert ist, was bei RSS
auch kein Wunder ist, die gibt es nur bei (X)HTML.
Auch der Validator mäkelt dieses und weitere Entitäten an - es ist ja auch keine DTD angegeben,
worin die definiert sein könnten und auch keine seitenspezifische Erweiterung der DTD.

Bei UTF-8 kannst du Umlaute doch einfach so hinschreiben. Und bei Zeichen, die du nicht direkt
eingeben kannst oder magst, mußt du als Entität eben den numerischen Wert nachschlagen und
verwenden.[/quote]

Das sagt mir auch Chrome…
Zu deiner sache mit den Umlauten… wenn ich ÄäÖöÜüß usw. normal schreibe zeigt er mir nur tolle ? an statt dem gewünschtem Zeichen.

Diese Umschreibungen sind also auf UTF-8 zurück zuführen das ich ja auch selbst auf der Seite verwende… weil wenn ich die Umlaute normal schreibe sieht das dann so aus:
antribute.eu/?p=betainfo

@hummer: Die Kommentare stammen nicht von mir, hab das aber jetzt direkt richtig gestellt.

Hier der neue Code. Neuer sowie alter bekamen ein Sicherheitsupdate :ps: :
pastebin.com/i8fGzAuH

Für utf-8 brauchts schon was mehr als es nur im -Bereich zu notieren.
Hier mal ein Artikel

Der Kram unter antribute.eu/?p=betainfo
wird als UTF-8 gesendet, im Dokument wird aber die übliche ISO-Kodierung verwendet.
Entscheiden muß man sich da schon, sonst kann das nicht klappen.

Wenn du den Kram wirklich mit Entitäten maskieren willst, mußt du oben im Dokument einen
DOCTYPE mit einer entsprechenden Erweiterung angeben, damit die Entitäten interpretiert
werden. Das Thema ist übrigens auch bei neueren XHTML-Varianten problematisch, auch
wenn man eine DTD angibt, in der die Entitäten definiert sind, denn die browser gucken da
nicht nach…
Von daher ist von anderen als den für XML direkt definierten dringend abzuraten - bei HTML
kann man das machen, sonst aber besser ganz vermeiden.
Dieses Problem haben wir unter anderem den browser-Anbietern und der XML-Arbeitsgruppe
des W3C zu verdanken, welches nur teilweise die gleichen Leute sind und die sich nicht
zwangsläufig gegenseitig mögen, weshalb da keine Möglichkeit ausgelassen wird, sich gegenseitig
und Autoren Knüppel zwischen die Beine zu werfen ;o)

[quote=„hummer“]Für utf-8 brauchts schon was mehr als es nur im -Bereich zu notieren.
Hier mal ein Artikel[/quote]

Nun dann denke ich kann ich UTF-8 gänzlich vergessen :motz: mir ist keine Möglichkeit bekannt TinyMCE es abzugewöhnen aus Ä zB Ä zu machen…
Was mich aber auch wundert ist das es mit der Art wie ich UTF-8 „angab“ nie Probleme gab.

Die Feeds werden übrigens in G-Reader ordnungsgemäß angezeigt, beide…

@hoffmann: Kurzzeitiger Test mit der ISO-Kodierung :slight_smile: steht längst wieder auf UTF-8.
Und zu dieser DTD-Angabe im XML… mit XML hab ich echt noch nie was am Hut gehabt :ps: wodurch es für mich schlicht alles „Fremdgebiet“ ist.

Was dieses htmlspecialchars() angeht hab ich mal überlegt ob es so gemeint war:

htmlspecialchars(echo($news))

oder so:

htmlspecialchars($news)

[quote=„SirZimt“][quote=„hummer“]Für utf-8 brauchts schon was mehr als es nur im -Bereich zu notieren.
Hier mal ein Artikel[/quote]

Nun dann denke ich kann ich UTF-8 gänzlich vergessen :motz: mir ist keine Möglichkeit bekannt TinyMCE es abzugewöhnen aus Ä zB Ä zu machen…
Was mich aber auch wundert ist das es mit der Art wie ich UTF-8 „angab“ nie Probleme gab.[/quote]

dann schau mal da: http://www.tinymce.com/wiki.php/Configuration:entity_encoding

[quote=„Mohyra“][quote=„SirZimt“][quote=„hummer“]Für utf-8 brauchts schon was mehr als es nur im -Bereich zu notieren.
Hier mal ein Artikel[/quote]

Nun dann denke ich kann ich UTF-8 gänzlich vergessen :motz: mir ist keine Möglichkeit bekannt TinyMCE es abzugewöhnen aus Ä zB Ä zu machen…
Was mich aber auch wundert ist das es mit der Art wie ich UTF-8 „angab“ nie Probleme gab.[/quote]

dann schau mal da: http://www.tinymce.com/wiki.php/Configuration:entity_encoding[/quote]

Ok… man sollte dann wohl wie du in der aktuellen Dokumenation und nicht die auf dem PC nachsehen von etwa vor 2 Jahren… !haue.
Jetzt läuft TinyMCE im RAW Modus…

//EDIT:
Balmung meinte ja bei mb_strlen, mb_substr und mb_strpos müsste man das Charset angeben, wie macht man das denn da :astonished:.
Zudem weiß ich weiterhin nicht wie man den nun htmlspecialchars() einsetzt und wo :slight_smile:

//EDIT2:
Auch nach Angabe von UTF-8 für PHP ist weiterhin „?“ angesagt… !haue

Alle Ausgaben die HTML Code enthalten könnten und auf keinen Fall die RSS Syntax beschädigen sollen, müssen mit htmlspecialchars() ausgegeben werden.
Das könnte z.b. der Inhalt sein, der innerhalb steht, oder andere Felder die aus Text bestehen.

Was ja bei dir scheinbar der fall ist, ist dass die Daten in der Datenbank bereits mit den HTML Entities versehen sind.
D.h. htmlentities() wird auf die reinkommenen Daten angewendet, und dann mit htmlentities verziert und in die DB gespeichert.
Diese Methode ist in der Regel eine schlechte vorgehensweise, da man dann, genau wie du jetzt, Probleme hat, sobald man die Daten in einem non-HTML Kontext ausgeben möchte.

Die elegante Möglichkeit ist es, das Script daran zu hindern die htmlentities Kodiert abzuspeichern (sondern roh) und sie erst bei der Ausgabe in das gewünschte Format zu kodieren.

Und wenn du es anwenden willst, dann natürlich so:

Alles andere wäre ja Blödsinn.
In der Momentanen Fassung kann es aber, wie gesagt, passieren, dass da die Daten bereits mit htmlentities in der Datenbank liegen, dass die Ausgabe im Seitenquelltext dann so unschöne Dinge wie “&uuml;” enthält, die daraus resultieren, dass die Daten doppelt kodiert wurden.
Musst du mal ausprobieren was passiert :slight_smile:

mfg Balmung

So die “Live” Hilfe vom Balmung im IRC hat die letzten fehlerchen aufgedeckt…
Da muss ich ihm mal danken :stuck_out_tongue: mache mich nun an mein nächstes Vorhaben das ich dieses Wochenende hinbekommen will :smiley:.