2012-04-06 239 views
1

我有一個客戶端。假設他們的域名是www.mydomain.com。PHP preg_match總是返回false

我們正在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"; 
} 
?> 

然而,這始終返回false(「不從我的網域」),即使用戶是從mydomain.com到來。

是否有任何明顯的語法錯誤或其他邏輯問題,我沒有得到?

問題是我的新頁面(www.mydomain.com/newsection)仍然在該主域上?

+1

啓用'error_reporting',然後錯誤變得明顯。 – mario 2012-04-06 14:21:18

+0

[將eregi轉換爲preg_match - 什麼是Unknown修飾符'F'?](http://stackoverflow.com/questions/3451787/convert-eregi-to-preg-match-what-is-unknown-modifier- f) – mario 2012-04-06 14:23:38

回答

2

表達式中的斜槓需要轉義,因爲它們也是分隔符。另外,您也可以選擇其他分隔符:

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

注意我也逃過了. s,這是正則表達式中的特殊字符。他們不會破壞正則表達式,但它們匹配任何角色 - 可能不是你想要的。

+0

非常感謝。我知道這可能是這樣的,但我無法弄清楚。真的,真的很感激它。 – Ash 2012-04-06 14:24:45

1

開發時,你可以使用strpos

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

謝謝 - 很好的解決方案! – Ash 2012-04-06 14:36:12

0

打開的error_reporting。在

未知的修飾詞「/」:你實際上得到類似下面的警告,這將有助於您(尤其是MiniTech移動的回答相結合):

警告:的preg_match()[function.preg匹配]

+0

感謝您的提示!我一定會那樣做的。 :) – Ash 2012-04-06 14:27:42