19295


■やりたいこと：  
PHPにて、以下のコードを含む文字列から `<script type="text/javascript">`から`</script>`までを削除したい

ただし  
・`<!-- Add Google Analytics Tag // -->` が必ずある保証はない  
・このコードの上下には `<script type=` や `</script>` を含む文字列が複数ある  
・`google-analytics.com` の文字列はこの部分にのみ存在する とする

■やったこと  
`preg_match('{<script type(.*?)analytics}s', $data, $result);`  
で取得すると、一番最初の `<script type` から検索に引っかかる。

[code]

        <!-- Add Google Analytics Tag // -->
        <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-********-1']);
    _gaq.push(['_trackPageview']);
    _gaq.push(['_setCookiePath', '/']);
    
    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
        </script>
        <!-- // Add Google Analytics Tag -->
    
[/code]


CC BY-SA 3.0
2015-11-25T07:48:51.430
19279
2015-11-25T12:13:50.540
2015-11-25T08:08:23.800
12608
question
php 正規表現
正規表現　PHPで特定のタグをけしたい


XMLやHTML等、無限に入れ子が発生しうる文章に対して正規表現を使うのはおすすめできません。このような場合はHTMLパーサを使うのが一般的です。

[code]

    <?php
    
    $html = <<<__HTML
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>パーサを使ってGoogleAnalyticsのコードを削る</title>
    
        <!-- Add Google Analytics Tag // -->
        <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-********-1']);
    _gaq.push(['_trackPageview']);
    _gaq.push(['_setCookiePath', '/']);
    
    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
        </script>
        <!-- // Add Google Analytics Tag -->
    
        <script type="text/template">
            他のscriptタグ
        </script>
    </head>
    <body>
        <div>
            <p>本文</p>
        </div>
    </body>
    </html>
    __HTML;
    
    $GOOGLE_URL = '.google-analytics.com/ga.js';
    
    $doc = new DOMDocument();
    $doc->formatOutput = true;
    $doc->preserveWhiteSpace = false;
    $doc->documentEncoding = 'UTF-8';
    $doc->loadHTML($html);
    
    $scripts = iterator_to_array($doc->getElementsByTagName('script'));
    foreach ($scripts as $s) {
        if (strpos($s->nodeValue, $GOOGLE_URL) === false) continue;
        $s->parentNode->removeChild($s);
    }
    
    echo $doc->saveHTML($doc->documentElement);
    
[/code]

出力:

[code]

    <html>
    <head>
    <meta charset="UTF-8">
    <title>パーサを使ってGoogleAnalyticsのコードを削る</title>
    <!-- Add Google Analytics Tag // --><!-- // Add Google Analytics Tag --><script type="text/template">
            他のscriptタグ
        </script>
    </head>
    <body>
        <div>
            <p>本文</p>
        </div>
    </body>
    </html>
    
[/code]


CC BY-SA 3.0
2015-11-25T12:13:50.540
19295
2015-11-25T12:13:50.540
62
19279
answer