2012-04-06 2 views
1

У меня есть клиент. Предположим, что их домен - www.mydomain.com.PHP preg_match всегда возвращает false

Мы создаем новую страницу на сайте www.mydomain.com/newsection.

На странице/newsication клиент хотел бы добавить ссылку, которая говорит «Вернуться на главный сайт» (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.

Есть ли очевидные синтаксические ошибки или другие логические проблемы, которые я не получаю?

Является ли проблема, что моя новая страница (www.mydomain.com/newsection) по-прежнему находится в этом основном домене?

+1

Включить 'error_reporting', тогда ошибка становится очевидной. – mario

+0

Возможный дубликат [Convert eregi to preg_match - что такое Неизвестный модификатор 'F'?] (Http://stackoverflow.com/questions/3451787/convert-eregi-to-preg-match-what-is-unknown-modifier- f) – mario

ответ

2

Черты в выражении должны быть экранированы, поскольку они также являются разделителем. Кроме того, вы можете выбрать другой разделитель:

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

Примечание Я также избежало . с, которые являются специальными символами в регулярных выражениях. Они не будут ломать регулярное выражение, но они соответствуют любому персонажу - возможно, не то, что вы хотите.

+0

СПАСИБО ВАС. Я знал, что это возможно, но я просто не мог понять. Действительно, очень ценю это. – Ash

1

Вы можете просто использовать strpos

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

Спасибо - хорошее решение! – Ash

0

Включите error_reporting при разработке. Вы на самом деле получить что-то вроде следующего предупреждения, которые должны помочь вам (особенно в сочетании с ответом Minitech в):

Предупреждение: preg_match() [function.preg матча]: Неизвестный модификатор «/» в

+0

Спасибо за подсказку! Я обязательно это сделаю. :) – Ash

Смежные вопросы