10

このpreg_match文字列を使用しています

preg_match('/Trident/7.0; rv:11.0/',$_SERVER["HTTP_USER_AGENT"]

IE11を検出して、タブレットモードを有効にできるようにします。ただし、「unknown delimiter 7」を返します。

PHPが文句を言わずにこれを行うにはどうすればよいですか?

4

8 に答える 8

10

ユーザー エージェント文字列は、さまざまなプラットフォームまたはデバイスで異なる方法で報告される場合があります。これを見てください:http://msdn.microsoft.com/en-au/library/ie/hh869301(v=vs.85).aspx

IE11 以降で報告されているほとんどのユーザー エージェントをカバーする次の文字列パターンが見つかりました (Microsoft が新しいバージョンの IE 用にユーザー エージェント文字列を再度変更した場合、当てはまらない可能性があります)。

if (preg_match("/(Trident\/(\d{2,}|7|8|9)(.*)rv:(\d{2,}))|(MSIE\ (\d{2,}|8|9)(.*)Tablet\ PC)|(Trident\/(\d{2,}|7|8|9))/", $_SERVER["HTTP_USER_AGENT"], $match) != 0) {
    print 'You are using IE11 or above.';
}
于 2014-08-27T04:17:15.437 に答える
2

IE11 にはタッチ バージョンと非タッチ バージョンがあります。つまり、Guilherme Sehn の回答はタッチ デバイスでは機能しません。

if(strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false)

代わりに、これを使用します。

if ( strpos($_SERVER['HTTP_USER_AGENT'], 'rv:11.0')     !== false
  && strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0;')!== false)
{
    echo "User is on IE11 touch / non-touch";
}

これは、"Trident" とリビジョン番号の間に任意の数のパラメーターを追加できるためです。

同様に、彼らが接触しているかどうかを確認したい場合は、「Touch;」の strpos を実行します。

于 2014-07-23T14:18:51.477 に答える
1

正規表現文字列にない別の文字を使用することは常に良いことです。これにより、文字列をエスケープする必要がなくなり、長い文字列を読みやすくなります。したがって~、区切り文字に使用できます:

preg_match('~Trident/7.0; rv:11.0~',$_SERVER["HTTP_USER_AGENT"])

もう 1 つのアイデアは、stristr関数を使用して、文字列が別の文字列に含まれているかどうかを確認することです。

stristr($_SERVER['HTTP_USER_AGENT'],'Trident/7.0; rv:11.0')
于 2014-01-13T13:38:12.137 に答える
0

このデータを自分で取得するには、 browscap プロジェクトを使用します。より高速で信頼性が高い

于 2013-11-02T14:56:29.037 に答える