0

次の3つの可能なURLがあります..

  • www.mydomain.com/445/loggedin/?status=empty
  • www.mydomain.com/445/loggedin/?status=完了
  • www.mydomain.com/445/loggedin/

www.mydomain.com/445 の部分は動的に生成され、毎回異なるため、正確に一致させることはできません。次の部分を検出するにはどうすればよいですか...

  • $url に login が含まれているが、/?status=empty または /?status=complete のいずれかが含まれていない場合

ログインした部分を常に検出するものに関係なく、私が試みるすべてが失敗します..

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';
}
4

3 に答える 3

1

URL をセグメントに分割する

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

次に、その配列でロジックを使用するだけで、最初に含めた URL が次のように返されます。

Array ( [0] => 445 [1] => loggedin [2] => ?status=empty )
于 2013-04-12T23:36:06.220 に答える
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";
}
于 2013-04-13T00:09:21.610 に答える