ich schließlich Ihre Frage beantworten, lassen Sie mich diese Erklärung von dem, was du bist über
obwohl
tun über Wie Sie nicht gesagt haben, ich bin mir nicht ganz sicher, warum würden Sie möchte das machen. Das Sammeln von Roh-HTML von einem Benutzer und das Anzeigen an anderer Stelle wird als großes Sicherheitsloch betrachtet. Es würde schwierig sein, alles Javascript loszuwerden, wenn man nur eine Regex verwendet. Das Entfernen der Script-Tags wäre einfach, aber das Entfernen des Inline-Javascript wäre der schwierige Teil. Wenn möglich, empfehle ich Ihnen, einen anderen Weg zu finden, um Ihre Aufgabe zu erfüllen, als dem Benutzer eine javascript-reduzierte Version der Webseite zu geben.
Ein Weg, wie Sie es tun könnten, ist über einen Iframe. Verwenden
<iframe src="html_you_want_to_strip" sandbox=""></iframe>
deaktiviert alle Javascript innerhalb des Iframe ausgeführt werden. Beachten Sie, dass es auch andere Möglichkeiten gibt, mit denen schädliche Elemente ohne JavaScript in Ihre Website geladen werden können.
Nun, da ich erklärt habe, was Sie tun sollten, wenn sie Javascript Strippen kommt, Ihre Frage zu beantworten,
A. Löschen von Script-Tags aus nur den Körper oder nur die Header:
Die beste Möglichkeit, Granularität zu erhalten, wenn JavaScript entfernt wird, wäre PHP DOMDocument-Klasse zu verwenden. Im Grunde werden Sie das Dokument in diese DOMDocument-Klasse laden und es von den gewünschten Skript-Tags entfernen.
<?php
$html = "the HTML you want filtered";
$DOM = new DOMDocument('1.0','utf-8');
$DOM->loadHTML($html);
$bodyTags = $DOM->getElementsByTagName('body');
/*
We will run under the assumption that the user has the ability to add two
body tags and hide information in the second one, that is why we don't
just use $DOM->getElementsByTagName('body')[0]
*/
foreach($bodyTags as $body){
foreach($body->getElementsByTagName('script') as $script){
$script->parentNode->removeChild($script);
/*
The reason we have to this is because you cant just do
$script->remove(), that would be too easy :)
*/
}
}
Der gleiche Code oben verwendet werden könnte abzustreifen Skripte aus dem Head-Tag: Zum Beispiel, wenn Sie nur die Beseitigung der Script-Tags in dem Körper gelangen wollen, könnten Sie so etwas schreiben. Wenn Sie Artikel mit einem bestimmten Index löschen möchten, können Sie folgende Schritte mit Ihrem Foreach ausführen:
B.Das Inline-JavaScript entfernen
Wir können den gleichen DOMDocument-Parser verwenden, außer das Parsen aller Elemente dieses Mal nach allen Javascript-Ereignissen (die glücklicherweise alle mit on beginnen). Der Code sieht folgendermaßen aus.
<?php
//starting where the last code leaves off
foreach($DOM->getElementsByTagName('*') as $element){
//This selects all elements
foreach($element->attributes as $attribute){
if(preg_match('/on.*/',$attribute)==1){
/*
"on" looks for on and ".*" states that there
can be anything after the on (onmousemove,onload,etc.)
*/
$element->removeAttribute($attribute)
}
}
}
Am Ende des Codes werden Sie die gestrippt HTML zu speichern und sie an den Benutzer zurück
$parsedHTML = $DOM->saveHTML()
„Die Antwort mochte ich am meisten zu diesem Thema von Binh war“ - Shame es funktioniert nicht. https://pastebin.com/t28dn6Zt – Quentin