通过将 utm_source=&utm_campaign=&utm_medium= 放在字符串中的所有链接后面,我遇到了一些问题。
我的输出是: http: //pastebin.com/WKb1sidu
到目前为止,我的完整代码是:
我已经尝试了任何方法使其正常工作,但无法解决最后一件事。有没有更好的解决方案?嗯,在谷歌和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;
}