私は@Alex's approach hereを使用して、組み込みのDOMDocumentを使用してHTML文書からスクリプトタグを削除しました。問題は、Javascriptのコンテンツを含むスクリプトタグがあり、その後に外部のJavascriptソースファイルにリンクする別のスクリプトタグがあり、すべてのスクリプトタグがHTMLから削除されていない場合です。DOMDocumentはHTMLソースからスクリプトタグを削除します
$result = '
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>
hey
</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
alert("hello");
</script>
</head>
<body>hey</body>
</html>
';
$dom = new DOMDocument();
if($dom->loadHTML($result))
{
$script_tags = $dom->getElementsByTagName('script');
$length = $script_tags->length;
for ($i = 0; $i < $length; $i++) {
if(is_object($script_tags->item($i)->parentNode)) {
$script_tags->item($i)->parentNode->removeChild($script_tags->item($i));
}
}
echo $dom->saveHTML();
}
上記のコードの出力:
<html>
<head>
<meta charset="utf-8">
<title>hey</title>
<script>
alert("hello");
</script>
</head>
<body>
hey
</body>
</html>
あなたは出力から見ることができるように、唯一の外部スクリプトタグを削除しました。すべてのスクリプトタグが削除されていることを確認するためにできることはありますか?
これはうまくいった、ありがとう! – RandomCoder
もう1つの解決策は、要素を逆順にループすることです。 – CBroe