我通过在字符串中的所有链接后面加上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;
}
答案 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}}