2012-04-06 4 views
1

私はクライアントを持っています。ドメインがwww.mydomain.comであるとします。PHP preg_matchは常にfalseを返します

www.mydomain.com/newsectionで新しいページを作成しています。

/newsectionページで、クライアントは以前にメインサイトにいた場合のみ、「メインサイトに戻る」(www.mydomain.com)というリンクを追加します。

<?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から来ている場合でも:

だから、私はこのようなPHPのコードスニペットを設定します。

明らかな構文エラーや他の論理的な問題はありますか?

私の新しいページ(www.mydomain.com/newsection)がメインドメインにまだ残っているという問題はありますか?

+1

'error_reporting'を有効にすると、エラーが明らかになります。 – mario

+0

[eregiをpreg_matchに変換する - 未知の修飾語 'F'は何ですか?](http://stackoverflow.com/questions/3451787/convert-eregi-to-preg-match-what-is-unknown-modifier- f) – mario

答えて

2

式内のスラッシュは、区切り文字でもあるため、エスケープする必要があります。私はまた、正規表現での特殊文字です. Sを、エスケープ

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

注:別の方法として、あなたは別の区切り文字を選択することができます。彼らは正規表現を壊すことはありませんが、彼らは任意の文字に一致します - おそらくあなたが望むものではありません。開発するとき

+0

ありがとうございます。私はそれがおそらくそれのようなものであることを知っていたが、私はそれを理解できなかった。本当に、本当にそれを感謝します。 – Ash

1

あなただけのerror_reportingのstrpos

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

ありがとう - 良い解決策! – Ash

0

電源を入れて使用することができます。あなたが実際にあなたを助ける必要があり、次の警告、のようなものを取得している(特にminitechの答えと組み合わせる):

警告:するpreg_match()[function.pregマッチ]:不明な修飾子「/」

+0

チップをありがとう!私は間違いなくそれを行うでしょう。 :) – Ash