PHP preg_match总是返回false

时间:2012-04-06 14:19:35

标签: php preg-match http-referer

我有一个客户。假设他们的域名是www.mydomain.com。

我们正在www.mydomain.com/newsection创建一个新页面。

在/ newsection页面上,客户端想要添加一个“返回主站点”(www.mydomain.com)的链接,前提是该用户之前曾在主站点上。

所以,我设置了这样的PHP代码片段:

<?php
$referral = $_SERVER['HTTP_REFERER'];
if (preg_match('/http://www.mydomain.com/', $referral)) {
echo "from My Domain";
} else {
echo "not from My Domain";
}
?>

但是,即使用户来自mydomain.com,这也总是返回false(“Not from My Domain”)。

我有没有明显的语法错误或其他逻辑问题?

我的新网页(www.mydomain.com/newsection)仍然存在于该主域名中的问题?

3 个答案:

答案 0 :(得分:2)

表达式中的斜杠需要进行转义,因为它们也是分隔符。或者,您可以选择其他分隔符:

preg_match('~http://www\.mydomain\.com~', $referral)

注意我也转义了. s,它们是正则表达式中的特殊字符。他们不会破坏正则表达式,但他们匹配任何角色 - 可能不是你想要的。

答案 1 :(得分:1)

您可以使用strpos

if (strpos($referral, 'http://www.mydomain.com') !== false) {

答案 2 :(得分:0)

开发时启用error_reporting。你实际上得到了类似下面的警告,它可以帮助你(特别是与minitech的答案相结合):

  

警告:preg_match()[function.preg-match]:

中的未知修饰符'/'