Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
[NG] RSS-/Atom-Feed und Sonderzeichen
#1
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
#2
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?
http://www.profi-webmaster.com - Gratis Webspace ohne Werbung.
Donated $5,00 USD! Cool
#3
Ich werde das weiterleiten. Smile

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
#4
@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
#5
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
#6
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.
http://www.profi-webmaster.com - Gratis Webspace ohne Werbung.
Donated $5,00 USD! Cool
#7
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
#8
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.


Angehängte Dateien Thumbnail(s)
   

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.