【问题标题】:PHP preg_match always returns falsePHP preg_match 总是返回 false
【发布时间】:2012-04-06 14:19:35
【问题描述】:

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

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

在 /newsection 页面上,客户希望添加一个链接,上面写着“返回主站点”(www.mydomain.com),前提是用户之前曾访问过主站点。

所以,我这样设置 PHP 的代码 sn-p:

<?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(“不是来自 My Domain”)。

是否有任何明显的语法错误或其他我没有遇到的逻辑问题?

我的新页面 (www.mydomain.com/newsection) 是否仍在该主域上?

【问题讨论】:

标签: php preg-match http-referer


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢。我知道它可能是这样的,但我就是想不通。真的,真的很感激。
【解决方案2】:

你可以使用strpos

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

【讨论】:

    【解决方案3】:

    开发时开启error_reporting。您实际上收到了类似以下警告的信息,这应该对您有所帮助(尤其是结合 minitech 的回答):

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

    中的未知修饰符“/”

    【讨论】:

    • 感谢您的提示!我一定会这样做的。 :)
    猜你喜欢
    • 2020-12-27
    • 2014-08-26
    • 2012-08-23
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多