0

通过将 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; 
 }
4

1 回答 1

1

根据您链接的输出,您的逻辑似乎有问题,并且您在活动参数前面加上 a?什么时候应该是 a &

现在,我并没有真正细化你的逻辑来弄清楚你到底哪里出错了,但似乎你把事情复杂化了..

你应该能够跳过它parse_url并重建东西,而只是做一些更简单的事情,如下所示:

if (strpos($url,'utm_medium')===false) {
  $url = explode('?',$url,2);
  $url = $url[0] . '?' . $utm;
  if (isset($url[1])) $url .='&'.$url[1];
}
于 2013-09-23T18:12:41.437 回答