MyBB.de Forum
[NG] RSS-/Atom-Feed und Sonderzeichen - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Archiv (https://www.mybb.de/forum/forum-57.html)
+--- Forum: MyBB 1.2.x und älter (https://www.mybb.de/forum/forum-27.html)
+---- Forum: Bugs (https://www.mybb.de/forum/forum-40.html)
+----- Forum: Gemeldete/Nicht gemeldete Bugs (https://www.mybb.de/forum/forum-41.html)
+----- Thema: [NG] RSS-/Atom-Feed und Sonderzeichen (/thread-8398.html)



[NG] RSS-/Atom-Feed und Sonderzeichen - Boardie05 - 20.01.2008

Hallo,

mir ist ein Problem mit der Behandlung von Sonderzeichen im RSS-Feed aufgefallen.
Der Titel meines Forums (Boardname) enthält ein "&". Mein RSS wird in der Kodierung UTF8 ausgeliefert. Das "&" müsste laut Spezifikation doch (auch bei UTF8) als "&" kodiert ausgeliefert werden. Leider kommt folgendes heraus (im Quelltext bei RSS und Atom):
Code:
&
Das wird natürlich im Feedreader (getestet mit FF2 und IE7) nicht als "&" dargestellt.
Diese Kodierung für das "&" findet sich beim RSS-Feed in den Tags "title" und "description", im Atom-Feed in den Tags "title" und "subtitle". Bei der Ausgabe des RSS-Feeds im Browser/Feedreader erscheint
Code:
&
bei der Ausgabe des Atom-Feeds im Browser/Feedreader erscheint
Code:
&

Ansonsten arbeitet die Ausgabe der Feeds bei mir einwandfrei und auch die Umlaute werden korrekt dargestellt. Ich habe mir auch schon die Datei "class_feedgeneration.php" angesehen. In dieser Datei gibt es die Funktion "sanitize_content($content)". In dieser Funktion wird scheinbar erst eine Ersetzung des "&" durch "&" durchgeführt, danach wird das Ganze noch einmal per "htmlspecialchars_uni($content)" konvertiert (hierbei werden ja alle "&" durch "&" ersetzt, oder?).

Was kann man ändern, damit man
  1. eine XML bzw- Feed-konforme Ausgabe erhält und
  2. das "&" in der RSS- und Atom-Ausgabe richtig dargestellt wird?


Gruß
Boardie05


RE: RSS-/Atom-Feed und Sonderzeichen - CoolRunner - 20.01.2008

Wo wir schon beim Thema sind die Zeichen=, > und < werden im RSS auch falsch dargestellt.
-> Damit die Ausgabe stimmt müssen aber die echten Zeichen und nicht die gewandelten übertragen werden, deswegen ist htmlspecialchars_uni am Ende von sanitize_content falsch! <-

So geht es:
class_feedgeneration.php
Ersetzte die Funktion sanitize_content durch diese:
PHP-Code:
    function sanitize_content($content)
    {
        
$content htmlspecialchars_uni($content);
        
$content preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i""&#x26;$1"$content);
        
$replacers = array( ']]>'=>']]&gt;'
                        
'&amp;'=>'&',
                        
'&gt;'=> '>',
                        
'&lt;'=> '<',
                        
'&quot;' => '"'
                         
);
return 
strtr($content,$replacers);
    } 

Getestet Smile
hf

Das ist ein echter Bug im mybb, ist der schon gemeldet?


RE: RSS-/Atom-Feed und Sonderzeichen - Michael - 20.01.2008

Ich werde das weiterleiten. Smile


RE: RSS-/Atom-Feed und Sonderzeichen - Boardie05 - 20.01.2008

@CoolRunner: Danke! Ich habe den Code getestet. Er funktioniert bei mir einwandfreiCool

@Michael: Danke für's Weiterleiten. Das MyBB ist 'ne tolle Software. So werden Schritt für Schritt auch die kleinen Problemchen eliminiertWink

Gruß
Boardie05


RE: RSS-/Atom-Feed und Sonderzeichen - Boardie05 - 20.01.2008

CoolRunner schrieb:[...]
class_feedgeneration.php
Ersetzte die Funktion sanitize_content durch diese:
PHP-Code:
    function sanitize_content($content)
    {
        
$content htmlspecialchars_uni($content);
        
$content preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i""&#x26;$1"$content);
        
$replacers = array( ']]>'=>']]&gt;'
                        
'&amp;'=>'&',
                        
'&gt;'=> '>',
                        
'&lt;'=> '<',
                        
'&quot;' => '"'
                         
);
return 
strtr($content,$replacers);
    } 
[...]

Was mir noch auffällt: Das Forum hier ersetzt innerhalb der PHP-Tags
Code:
&gt;
und
Code:
&lt;
durch < und >

Hier also nochmal der unformatierte Code von Coolrunner (damit es wirklich funktioniert):
class_feedgeneration.php
Ersetze die Funktion sanitize_content durch diese:
Code:
    function sanitize_content($content)
    {
        $content = htmlspecialchars_uni($content);
        $content = preg_replace("#&([^\#])(?![a-z1-4]{1,10};)#i", "&#x26;$1", $content);
        $replacers = array( ']]>'=>']]&gt;',
                        '&amp;'=>'&',
                        '&gt;'=> '>',
                        '&lt;'=> '<',
                        '&quot;' => '"'
                         );
    return strtr($content,$replacers);
    }

Gruß
Boardie05


RE: RSS-/Atom-Feed und Sonderzeichen - CoolRunner - 20.01.2008

Gut das Dir das auffällt, das ist ja an sich schon wieder ein anderer Bug (das mit den php Tags).
Man kann also &lt; und &gt; nicht innerhalb eines php Tags verwenden.


RE: RSS-/Atom-Feed und Sonderzeichen - Boardie05 - 21.01.2008

Ja, das sollte auch noch gemeldet werden. Sind aber alles keine groben Fehler sondern eher kleine Darstellungsfehler. Es wäre aber schön, wenn die Behebung mit in die nächste Version einfließen würde.

Gruß
Boardie05


RE: [NG] RSS-/Atom-Feed und Sonderzeichen - Michael - 13.02.2008

Ich habe das Ganze gerade in der aktuellen Entwicklerversion von MyBB 1.4 getestet. Der Feed wird validiert und die Anzeige ist korrekt. Somit scheinen diese Dinge schon behhoben worden zu sein.