把分析放在所有链接php背后

时间:2013-09-23 07:32:27

标签: php google-analytics

我通过在字符串中的所有链接后面加上utm_source =& utm_campaign =& utm_medium =来面对一些问题。

我的输出是: http://pastebin.com/WKb1sidu

到目前为止我的完整代码是:

我已经尝试了任何使它工作的东西,但无法修复最后一件事。对此有什么更好的解决方案吗?嗯,在google和stackoverflow上找不到任何东西。

function AppendCampaignToString($string) {
$regex = '#(<a href=")([^"]*)("[^>]*?>)#i';
return preg_replace_callback($regex, '_appendCampaignToString', $string);
}

function _AppendCampaignToString($match) {

global $utm;


//Tjek om der allerede er utm bag på, for så skal den ikke lave samme nummer.

if ( strpos($match[2], "utm_medium") === false):

$url = $match[2];

$ParseURLString = parse_url($url);

print_r($ParseURLString);

if ( !isset($ParseURLString['query'])):
      $add="?";
else:
      $add="&";
endif;

if ( isset($ParseURLString['query']) && $ParseURLString['path'] == "/"):
      $add="?";
endif;

if ( !isset($ParseURLString['path']) && $ParseURLString['path'] == "/"):
     $slash= "";
endif;

if ( empty($ParseURLString['scheme']) || !isset($ParseURLString['scheme'])):
      $scheme = "http://" . str_replace("www.","",$_SERVER['HTTP_HOST']);
else:
      $scheme = $ParseURLString['scheme'] . "://";
endif;

if ( strpos($ParseURLString['path'], ".")):
  $add="?";
  $slash="";

endif;



if ( !isset($ParseURLString['query'])):
    $url = $scheme  . $ParseURLString['host'] . $ParseURLString['path'] . $slash . $add . $ParseURLString['query'] . $utm;
else:
    $url = $scheme . $ParseURLString['host'] . $ParseURLString['path'] . $slash .  $add . $ParseURLString['query'] . $add . $utm;
endif;

//$url = str_replace($url, $newURL, $url);

return $match[1] . $url . $match[3];
else:
    return $match[1] . $match[2] . $match[3];
endif; 
 }

1 个答案:

答案 0 :(得分:1)

根据您的链接输出,看起来您的逻辑存在问题,并且当广告系列参数?&时,您在其前面加parse_url作为前缀。

现在,我并没有真正弄清楚你的逻辑确切地找出你出错的地方,但似乎你可能过于复杂了......

你应该可以跳过那个if (strpos($url,'utm_medium')===false) { $url = explode('?',$url,2); $url = $url[0] . '?' . $utm; if (isset($url[1])) $url .='&'.$url[1]; } 并重建一些东西,然后做一些更简单的事情:

{{1}}