我目前正在为我的联属网站开发一个全新的链接系统。但是,我在PHP领域仍然相对缺乏经验,尽管我一直都在管理它。会员链接具有不同的结构,我想通过PHP创建一个URL,这些URL随结构自动提供。我无法很好地描述它,但我仍然尝试一个例子:
用户X输入URL“example.net/ref.php?url=NORMAL_URL”,并根据“NORMAL_URL”中的域应用结构。例如,“?Aff = XYZ”被添加到URL“example.net/ref.php?url=http://example.de/”。如果URL“example.net/ref.php?url=http://example.nl/”被定向到“affiliate_network.de/encoded_url=http%3A%2F%2Fexample.nl%2F,我希望你至少拥有它一点点了解。谢谢你的帮助!
答案 0 :(得分:0)
将网址发送到此函数,它使用带有here正则表达式的preg_match来提取域部分。
$matches
将是一个包含元素1中的域的数组,因此您可以使用$matches[1]
找到它
此函数检查数组是否为空(未找到域),并在这种情况下返回null
然后,它使用开关将匹配的域与您可以指定的域列表进行比较,如果列出的域都不匹配,则它将再次返回null
在每种情况下,我只需输入一个返回值,但您可以有创意,并在那里做任何您希望按照应用程序需要的方式构建URL。
我建议而不是将重定向放在此函数中,这在以后维护应用程序时会出现语义混乱。您应该检查函数的返回值,如果它不是null,则重定向到返回值。如果它为null,那么您可以执行其他操作(例如显示错误)
function getReturnFromURL($url) {
$matches = null;
preg_match("/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/im", $url, $matches);
if (empty($matches)) return null;
switch ($matches[1]) {
case "ebay.de":
return "ebay-network.de/XXX?encoded_url=the_encoded_?-{$matches[1]}";
break;
case "amazon.de":
return "amazon.de/XXX?encoded_url=the_encoded_?-{$matches[1]}?tag=XYZ";
break;
default:
return null;
}
}