HTML内のアクセス解析タグを除去する方法
webサイトのHTMLソースを保存して、ほかのページで表示させたり、ローカルで表示させたりする場合で、そのページのアクセス解析タグを取り除く方法です。
アクセス解析タグを除去せずにブラウザで表示してしまうと、ローカルのパスやテストサーバ、非公開サーバのアドレスがアクセスログに残ってしまいます。
解析タグはトラッキングコードとも呼ばれます。
主流のアクセス解析サービスの場合
アクセス解析ツールで主流の解析タグは次のようなパターンです。
<!-- 【解析ツールの名称】 --> <script language="javascript" src="http://【解析サーバのURL】" ></script> <noscript><div align="right"><img src="http://【解析サーバのURL】" /></noscript> <!-- 【解析ツールの名称】 -->
外部JavaScriptでブラウザの詳細情報を取得するタグと、JavaScript非対応のブラウザ用に1ピクセル×1ピクセルの透明画像でアクセス情報を得るタグの2種類で構成されています。
それ以外に解析ツールの名称がHTMLコメントアウトで書かれている場合があります。
特徴
- 『http』から始まる外部JavaScriptを呼び出すタグがある。
- NOSCRIPTタグの中に『http』から始まる画像を呼び出すIMGタグがある。
この特徴から汎用的にアクセス解析タグを取り除き、アクセス解析タグ以外を誤って除去しないようにするコードは次のようになります。
function check_noscript_accsess_tag($matches) { if(preg_match("/<img [^<>]*src=\"https?:\/\/[^<>\"]+\"/is",$matches[1])){ return ''; } return $matches[0]; } $html = preg_replace_callback( "/<script [^<>]*src=\"https?:\/\/[^<>\"]+\"[^<>]*><\/script>\s*<noscript>(.+)<\/noscript>/isU", "check_noscript_accsess_tag", $html );
『外部JavaScript呼び出し』と『NOSCRIPTタグ』だけの条件では、かなりの誤検知が出ると思います。
解析サービスの名称のHTMLコメントアウトを条件にすると、きれいに除去できそうですが、ここは動作とは関係がないため記載していない場合も考えられます。
またアクセス解析サービスのタグは必ず外部URLを使用していますが、次のGoogle AnalyticsのようにSSL対応のタグの場合は工夫が必要です。
しかしJavaScript非対応のブラウザ用にIMGタグを付けている限りではJavaScriptでURLを振り分けることができないので問題ないと思います。
Google Analyticsの場合
Google Analyticsでは1種類の書き方で非SSLとSSLに対応させるため、JavaScriptで外部JavaScriptのURLを振り分けています。
<script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try { var pageTracker = _gat._getTracker("XX-00000000-0"); pageTracker._trackPageview(); } catch(err) {}</script>
特徴
- 2つのSCRIPTタグで構成される。
- 1つ目のSCRIPTタグ内に『google-analytics.com』というドメイン名が含まれている。
この特徴からGoogle Analyticsのタグを取り除くには次のようなコードになります。
$html = preg_replace("/<script type=\"text\/javascript\">[^<>]+google-analytics\.com[^<>]+<\/script>\s+<script type=\"text\/javascript\">[^<>]+<\/script>/isU","",$html);
関連記事
- PHPでwebサーバー(apache/nginx)の実行ユーザー・グループを確認する方法
- リクエストヘッダーやリクエストボディーなどを取得する方法
- 負荷が高いときには503エラーを返す方法
- サイトの更新情報をPINGサーバに送信する方法
- PHPでロードアベレージを表示させる方法
- PHPでTwitterのツイートをする/ツイート一覧を取得する/検索する(API v1.1)
- インクルードパスを設定する方法
- オブジェクト(Object)を配列(Array)に変換する方法
- PHPでgzip圧縮形式(gz圧縮)のファイルを読み書きする方法
- PHPでfacebook投稿時に公開範囲を指定する方法
- PHPで複数の画像をfacebookに投稿する方法
- PHPでfacebookのフィード(ウォール)に投稿する方法
- PHPでのfacebookアプリの認証処理(APIを使うユーザー認証)
- MySQL関数のまとめ
- MySQLサーバに接続できるかどうかを確認する
- ディレクトリ内のファイルのパーミッションを一括で変更する
- POSTでアップロードできるファイルサイズの制限を変更する方法
- 暗号化・複合化を行う ブロック暗号
- date型やdatetime型と年月日時分秒への変換
- 関数・メソッドの存在を調べる方法
- PHPでTwitterのbotを作る方法 ツイートをする/ツイート一覧を取得する(API v1)
- strtotimeの指定
- PHPでHTMLメールを送る方法
- ディレクトリセパレータを短く定義する DIRECTORY_SEPARATOR
- モザイク画像を作る方法
- HTMLのTABLEタグを簡単にCSVファイルに変換する方法
- 画像表示のときに指定サイズにリサイズする(画像の拡大縮小)
- テキストを可逆的な暗号化する Crypt_Blowfish
- PHPでwhois検索をする Net_Whois
- よく使うヘッダー関数のまとめ
- キャリア・世代を判別する
- mb_send_mailでCCやBCCを指定する 表示名を指定する
- より高速に、推測困難な一意なIDを生成する方法
- 画像ファイルを指定容量ぎりぎりに圧縮する
- 指定したHTTPヘッダーが送信済みあるいは送信予定に含まれているか
- DOCUMENT ROOTを得る $_SERVER["DOCUMENT_ROOT"]は使えない!
- マルチバイト文字列(日本語文字)を一文字づつ取り出す
- ファイルを削除する/フォルダを削除する
- ファイルを読み込む/ファイルに書き込む
- ディレクトリ内のファイル一覧を取得する
- quoted-printable文字列の変換
スポンサーリンク