WebsiteBaker Support (2.12.x) > Hilfe & Support (deutsch)

RSS-Problem/Bug?

<< < (8/8)

evaki:
Ich gebe mir mal selbst die Antwort.


--- Code: ---    <item>
        <title><![CDATA[<?php echo stripslashes($item["title"]); ?>]]></title>
 <?php 
 $muell = array("<script>", "</script>", "<noscript>", "</noscript>");
        $description = str_replace($muell, "", $description); ?>       

 <description><![CDATA[<?php echo $description; ?>]]></description>       
--- End code ---


Zwar ist es immer noch möglich einen für RSS/XML nicht validen Code in NEWS einzubetten, aber <script> wird im RSS/XML entfernt, als eine reine Vorsichtsmaßnahme. Die Strings - hier html5 - lassen sich natürlich auch html-abwärtskompatibel und um sonstigen Kram erweitern.

Sinnvoll ist auch in die RSS-Doc's reinzuschauen, damit erst garkeine nonvalide Codes Eingang finden. Wie man sehen konnte, ist das ja machbar/möglich.

Das war's wohl zu beiden Anliegen, oder ist noch was offen?
Eigentlich ganz schön viele Wege, Wirrungen und Irrungen für so'n Spaß - muß aber anscheinend sein, wenn man keine Ahnung hat.
MfG. Evaki
 

DarkViper:
 $muell = array("<script>", "</script>", "<noscript>", "</noscript>");
 $description = str_replace($muell, "", $description); ?>
Der Code funktioniert, um die meisten neueren Tags als solche zu entfernen, nicht jedoch den enthaltenen JS-Code.
Allerdings kann solch ein Tag noch zusätzliche Parameter haben, z.B: <script type="javascript"> und dann klappt str_replace() nicht mehr.

Folgender Code entfernt sowohl <script> als auch <noscript> Tags, unabhängig von eventuellen Parametern oder überflüssiger Leerzeichen in den Tags und dazu gleich auch noch den  Inhalt innerhalb der Tags.
 $description = \preg_replace('/(.*?)(<(?:no)?script[^>]*>[^<]*<\/(?:no)?script>)(.*?)/is', '$1$3', $description);

Die 2. Lösung entfernt "<script>JS-Code</script>" komplett und bei "<noscript>HTML-Inhalt</noscript>", lässt sie den HTML-Inhalt stehen. [rot wird gelöscht, blau bleibt stehen]
 $description = \preg_replace('/(.*?)(?:(?:<script[^>]*>[^<]*(\s?)<\/script>)|(?:<noscript[^>]*>([^<]*)<\/noscript>))(.*?)/is', '$1$2$3', $description);

evaki:
Danke, danke, hilft weiter!
So kann jeder, der jetzt schon den Patch möchte, schon mal loslegen.

Die von mir vorgestellte Lösung ist eine rein pragmatische, mit dem Hintergedanken, daß wenn <script> fehlt, auch die Ausführung damit entfällt. Wenn dann Code - mit <script> "unsichtbar" - und anderes zu sehen sein sollte, weiß man, das gehört nicht dahin - so wie auch html in noscript  :?
Außerdem war ich zu faul mich wieder mal mit preg_replace rumzuschlagen
 - wenn ich's (noch) vermeiden kann  :-D

Tja, und manchmal muß man vorlegen, damit etwas zurück kommt.

MfG. Evaki

evaki:
Will man den erwünschten Effekt nicht nur bei html5 erreichen,
dann statt
 $muell = array("<script>", "</script>", "<noscript>", "</noscript>");
so
 $muell = array("<script", "</script>", "<noscript>", "</noscript>");
Ausführung auch nach unten hin kompatibel verhindert.

MfG. Evaki

Navigation

[0] Message Index

[*] Previous page

Go to full version