0

コンテンツを正しく表示するために使用しているモバイルデバイスのリストがあります。減価償却された関数は次のようになります。

function detectPDA($query){
    $browserAgent = $_SERVER['HTTP_USER_AGENT'];
    $userAgents = $this->getBrowserAgentsToDetect(); // comma separated list of devices
    foreach ( $userAgents as $userAgent ) {
        if(eregi($userAgent,$browserAgent)){
            if(eregi("iphone",$browserAgent) || eregi("ipod",$browserAgent) ){
                $this->iphone = true;
            }else{
                $this->pda = true;
            }
        }
    }
}

eregi関数を置き換える正しい方法は何ですか?

4

1 に答える 1

0

すべてのパターン文字列($userAgentおよびiphone)に特別な正規表現文字()が含まれていないと信頼できる場合は、正規表現をスラッシュ( )で()[]!|.^${}?*+囲み、最後のスラッシュの後に追加します(これは「大文字と小文字を区別しない」ことを意味します)。eregi/i

それで:

eregi($userAgent,$browserAgent) --> preg_match("/$userAgent/i",$browserAgent)
eregi("iphone",$browserAgent)   --> preg_match('/iphone/i',$browserAgent)

しかし、あなたはただそのままで一致$userAgentさせようとしています$browserAgentか?たとえば、特定の$userAgentがだった場合、を文字通りのピリオドに一致さfoo.barせたいです.か、それとも正規表現の意味で解釈したいですか(「任意の文字に一致」)?

前者の場合は、正規表現を完全に使用せずに、(大文字と小文字を区別しない)でstripos($haystack,$needle)文字列を検索するを使用することをお勧めします。そうすれば、文字通りの意味ではなく正規表現の意味で解釈されるアスタリスクについて心配する必要はありません。$needle$haystack$userAgent

を使用する場合は、に評価されるstriposaを返す可能性があることを忘れないでください。したがって、またはを使用する必要があります(リンクしたドキュメントを参照してください)。0false=== false!== false

于 2012-01-11T12:35:09.607 に答える