2013-04-12 3 views
0

У меня есть следующие три возможных URLs ..если/и заявление для URL с StrPos

  • www.mydomain.com/445/loggedin/?status=empty
  • www.mydomain.com/445/LoggedIn /? статус = полный
  • www.mydomain.com/445/loggedin/

www.mydomain.com/445 часть динамически и каждый раз разный, так что я не могу сделать точное совпадение, как я могу обнаружить следующее ...

  • Если $ URL содержит LoggedIn, но НЕ СОДЕРЖИТ или /? Статус = пустой OR /? Статус = полный

Все, что я стараюсь не удается, как ни на что он всегда обнаружит, вошедшего в части ..

if(strpos($referrer, '?status=empty')) { 
echo 'The status is empty'; 
} 
elseif(strpos($referrer, '?status=complete')) { 
echo 'The status is complete'; 
} 
elseif(strpos($referrer, '/loggedin/')) { 
echo 'The status is loggedin'; 
} 

ответ

1

фрагмент вверх по URL на сегменты

$path = explode('/',$referrer); 
$path = array_slice($path,1); 

затем просто использовать вашу логику на этом массиве, пихт т URL вы включили бы вернуть это:

Array ([0] => 445 [1] => loggedin [2] => ?status=empty) 
1

Вы могли бы сделать что-то вроде этого:

$referrer = 'www.mydomain.com/445/loggedin/?status=empty'; 

// turn the referrer into an array, delimited by the/
$url = explode('/', $referrer); 

// the statuses we check against as an array 
$statuses = array('?status=complete', '?status=empty'); 

// If "loggedin" is found in the url, and count the array_intersect matches, if the matches = 0, none of the statuses you specified where found 
if(in_array('loggedin', $url) && count(array_intersect($url, $statuses)) == 0) 
{ 
    echo 'The user is logged in'; 
} 
// if the complete status exists in the url 
else if(in_array('?status=complete', $url)) 
{ 
    echo 'The status is complete'; 
} 
// if the empty status exists in the url 
else if(in_array('?status=empty', $url)) 
{ 
    echo 'The status is empty'; 
} 

Я бы рекомендовал смотреть на array_intersect, это весьма полезно.

Надеюсь, что это поможет, не уверен, что это лучший способ сделать это, но может спровоцировать ваше воображение.

0

Strpos, вероятно, не то, что вы хотите использовать для этого. Вы можете сделать это с stristr:

if($test_str = stristr($referrer, '/loggedin/')) 
    { 
     if(stristr($test_str, '?status=empty')) 
     { 
      echo 'empty'; 
     } 
     elseif (stristr($test_str, '?status=complete')) 
     { 
      echo 'complete'; 
     } else { 
      echo 'logged in'; 
     } 
    } 

Но это, наверное, проще/лучше сделать это с регулярными выражениями:

if(preg_match('/\/loggedin\/(\?status=(.+))?$/', $referrer, $match)) 
{ 
    if(count($match)==2) echo "The status is ".$match[2]; 
    else echo "The status is logged in"; 
} 
Смежные вопросы