<docomo>タグ、<au>タグ、<softbank>タグの使用例

Docomoだけに表示させるドコモタグ(<docomo>〜〜</docomo>)、 auだけに表示させるauタグ(<au>〜〜</au>)、 Softbankだけに表示させるソフトバンクタグ(<softbank>〜〜</softbank>) の実装方法です。

例えば次のようなHTMLを作ったとします。

<docomo>
<div>
ここはドコモで表示させたい
</div>
</docomo>

<au>
<div>
ここはauで表示させたい
</div>
</au>

<softbank>
<div>
ここはSoftbankで表示させたい
</div>
</softbank>

このようにした場合のキャリア振り分けのPHPコードは正規表現で次のようにします。

<?php
/* ================================
 * carrier_tag
 *
 * @create  2009-02-16
 * @author  pentan
 * @url     http://pentan.info/
 *
 * Copyright (c) 2009 pentan.info All Rights Reserved.
 * 著作権表示部分の変更削除は禁止です
 * ================================
 */

$agent = $_SERVER['HTTP_USER_AGENT'];

if(preg_match("/^DoCoMo/", $agent)){
  $body=preg_replace("/<au>(.*)<\/au>/isU","",$body);
  $body=preg_replace("/<softbank>(.*)<\/softbank>/isU","",$body);
}elseif(preg_match("/^(J-PHONE|Vodafone|SoftBank|MOT-)/", $agent)){
  $body=preg_replace("/<docomo>(.*)<\/docomo>/isU","",$body);
  $body=preg_replace("/<au>(.*)<\/au>/isU","",$body);
}elseif(preg_match("/^(UP\.Browser|KDDI)/", $agent)){
  $body=preg_replace("/<docomo>(.*)<\/docomo>/isU","",$body);
  $body=preg_replace("/<softbank>(.*)<\/softbank>/isU","",$body);
}
$body=str_replace("<docomo>","",$body);
$body=str_replace("</docomo>","",$body);

$body=str_replace("<au>","",$body);
$body=str_replace("</au>","",$body);

$body=str_replace("<softbank>","",$body);
$body=str_replace("</softbank>","",$body);

関数版

PHPでは、次のコードで実装し、出力される前に関数carrier_tag_replace()を通します。

コード

<?php
/* ================================
 * carrier_tag_replace
 *
 * @create  2009/05/29
 * @author  pentan
 * @url     http://pentan.info/
 *
 * Copyright (c) 2009 pentan.info All Rights Reserved.
 * 著作権表示部分の変更削除は禁止です
 * ================================
 */

function carrier_tag_replace($body) {
	$agent = $_SERVER['HTTP_USER_AGENT'];
	
	if(preg_match("/^DoCoMo/", $agent)){
	  $body=preg_replace("/<au>(.*)<\/au>/isU","",$body);
	  $body=preg_replace("/<softbank>(.*)<\/softbank>/isU","",$body);
	}elseif(preg_match("/^(J-PHONE|Vodafone|SoftBank|MOT-)/", $agent)){
	  $body=preg_replace("/<docomo>(.*)<\/docomo>/isU","",$body);
	  $body=preg_replace("/<au>(.*)<\/au>/isU","",$body);
	}elseif(preg_match("/^(UP\.Browser|KDDI)/", $agent)){
	  $body=preg_replace("/<docomo>(.*)<\/docomo>/isU","",$body);
	  $body=preg_replace("/<softbank>(.*)<\/softbank>/isU","",$body);
	}
	$body=str_replace("<docomo>","",$body);
	$body=str_replace("</docomo>","",$body);
	
	$body=str_replace("<au>","",$body);
	$body=str_replace("</au>","",$body);
	
	$body=str_replace("<softbank>","",$body);
	$body=str_replace("</softbank>","",$body);
  return $body;
}

実行部

<?php
if(!($fp = @fopen("index.html","r"))) {
  die;
}

$data="";
while (!feof($fp)) {
  $data.=fgets($fp, 4096);
}
fclose($fp);

$data = carrier_tag_replace($data);

echo $data;

テンプレートファイル index.html

<docomo>
<div>
ここはドコモで表示させたい
</div>
</docomo>

<au>
<div>
ここはauで表示させたい
</div>
</au>

<softbank>
<div>
ここはSoftbankで表示させたい
</div>
</softbank>

出力結果 docomoの場合

<div>
ここはドコモで表示させたい
</div>

Smartyに実装する方法

Smartyでは、アウトプットフィルターにこの関数を指定することで、出力がフィルタリングされます。

$smarty->register_outputfilter("carrier_tag_replace");

cakePHPに実装する方法

cakePHPでは、afterFilter()にこの関数を指定することで、出力がフィルタリングされます。

cakePHP1.2

app/app_controller.php

<?php
class AppController extends Controller{
  function afterFilter(){
    …
    …
    $this->output = carrier_tag_replace($this->output);
  }
}

cakePHP1.1

app/app_controller.php

<?php
class AppController extends Controller{
  function afterFilter(){
    …
    …
    $out = carrier_tag_replace($out);
    ob_start();
    echo $out;
  }
}

関連記事

スポンサーリンク

経過時間、残り時間をリアルタイムに表示する方法

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る