我不想向 Facebook、Twitter 访客展示广告
I don't want to display ads to Facebook, Twitter Visitors
我现在在 facebook 上使用此代码。 “https”已激活且 wordpress 站点。
<?php
$ref = $_SERVER['HTTP_REFERER'];
if (strpos($ref, 'facebook.com') != false) {
?>
DON'T SHOW ADS
<?php } else { ?>
SHOW ADS
<?php } ?>
此代码适用于 facebook。我想添加 twitter,但是当我添加 twitter 时它根本不起作用。我试过了。
if (strpos($ref, 'facebook.com', 'twitter.com', 't.co') != false) {
不是那样的。如果 else 查询或“false”是否正确?我怎样才能以最简单的方式做到这一点?如果访问者来自 Facebook、Twitter,我不想展示广告。谢谢
strpos()
不检查多个“针”来寻找。您可以将它们存储在数组中
并逐个遍历每一个:
<?php
$ref = $_SERVER['HTTP_REFERER'];
$sitesWithAdsHidden = [
'facebook.com',
'twitter.com',
't.co',
];
$isHiddenSite = false;
foreach ($sitesWithAdsHidden as $site) {
if (strpos($ref, $site) !== false) {
$isHiddenSite = true;
break;
}
}
if ($isHiddenSite) {
?>
DON'T SHOW ADS
<?php } else { ?>
SHOW ADS
<?php } ?>
请注意,我还将 strpos
比较更改为 !==
,因为如果位置实际上是 0
(字符串).
首先,直接来自Wikipedia:
"The referrer field is an optional part of the HTTP request sent by the web browser to the web server."
因此,您应该经常检查请求中是否存在Http Referer。您可以使用 !empty()
或 isset()
来实现此目的,但是,为了将来的可维护性,您还可以使用 array_diff
和 array_keys
.
然后您也可以实现这一点,而不必使用 preg_match
.
遍历数组
if(!array_diff(['HTTP_REFERER'], array_keys($_SERVER)))
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER']))
// todo: disable adverts
您也可以使用 null cascading operator
将其缩减为一行。如果您没有进一步检查 $_SERVER
全局变量,请执行此操作。
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER'] ?? ''))
// todo: disable adverts
我现在在 facebook 上使用此代码。 “https”已激活且 wordpress 站点。
<?php
$ref = $_SERVER['HTTP_REFERER'];
if (strpos($ref, 'facebook.com') != false) {
?>
DON'T SHOW ADS
<?php } else { ?>
SHOW ADS
<?php } ?>
此代码适用于 facebook。我想添加 twitter,但是当我添加 twitter 时它根本不起作用。我试过了。
if (strpos($ref, 'facebook.com', 'twitter.com', 't.co') != false) {
不是那样的。如果 else 查询或“false”是否正确?我怎样才能以最简单的方式做到这一点?如果访问者来自 Facebook、Twitter,我不想展示广告。谢谢
strpos()
不检查多个“针”来寻找。您可以将它们存储在数组中
并逐个遍历每一个:
<?php
$ref = $_SERVER['HTTP_REFERER'];
$sitesWithAdsHidden = [
'facebook.com',
'twitter.com',
't.co',
];
$isHiddenSite = false;
foreach ($sitesWithAdsHidden as $site) {
if (strpos($ref, $site) !== false) {
$isHiddenSite = true;
break;
}
}
if ($isHiddenSite) {
?>
DON'T SHOW ADS
<?php } else { ?>
SHOW ADS
<?php } ?>
请注意,我还将 strpos
比较更改为 !==
,因为如果位置实际上是 0
(字符串).
首先,直接来自Wikipedia:
"The referrer field is an optional part of the HTTP request sent by the web browser to the web server."
因此,您应该经常检查请求中是否存在Http Referer。您可以使用 !empty()
或 isset()
来实现此目的,但是,为了将来的可维护性,您还可以使用 array_diff
和 array_keys
.
然后您也可以实现这一点,而不必使用 preg_match
.
if(!array_diff(['HTTP_REFERER'], array_keys($_SERVER)))
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER']))
// todo: disable adverts
您也可以使用 null cascading operator
将其缩减为一行。如果您没有进一步检查 $_SERVER
全局变量,请执行此操作。
if(preg_match('/facebook|twitter/', $_SERVER['HTTP_REFERER'] ?? ''))
// todo: disable adverts