15

ここでは @Alex のアプローチを使用して、組み込みの DOMDocument を使用して HTML ドキュメントからスクリプト タグを削除しました。問題は、JavaScript コンテンツを含むスクリプト タグと、外部 Javascript ソース ファイルにリンクする別のスクリプト タグがある場合、すべてのスクリプト タグが 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>

出力からわかるように、外部スクリプト タグのみが削除されました。すべてのスクリプト タグを確実に削除するためにできることはありますか?

4

2 に答える 2