WebsiteBaker Support (2.12.x) > Hilfe & Support (deutsch)
RSS-Problem/Bug?
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