ben*_*ben 9 php preg-match internet-explorer-11
我正在使用这个preg_match字符串
preg_match('/Trident/7.0; rv:11.0/',$_SERVER["HTTP_USER_AGENT"]
Run Code Online (Sandbox Code Playgroud)
检测IE11所以我可以为它启用平板电脑模式.但是它返回"未知分隔符7".
如果没有PHP向我抱怨,我怎么能这样做呢?
Gui*_*ehn 13
这真的是一个正则表达式还是只是一个文字字符串?如果它只是一个字符串,则可以使用strpos函数.
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false) {
// your code
}
Run Code Online (Sandbox Code Playgroud)
如果它是正则表达式,则必须转义像/和的特殊字符.
编辑:
您可以在此答案的注释中看到代码在所有情况下都未正确检测到IE 11.我实际上没有测试它以匹配它,我刚刚调整了问题创建者的代码strpos而不是preg_match因为它被错误地应用了.
如果您想要一种可靠的方法来检测IE 11,请查看其他答案.
可以跨各种平台或设备不同地报告用户代理字符串.看看这个:http://msdn.microsoft.com/en-au/library/ie/hh869301(v = vs.85).aspx
刚刚发现以下字符串模式覆盖了IE11或更高版本报告的大多数用户代理(如果Microsoft为新版本的IE再次更改其User-agent字符串,则可能不成立):
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.';
}
Run Code Online (Sandbox Code Playgroud)
我认为应该是
if (preg_match("/Trident\/7.0;(.*)rv:11.0/", $_SERVER["HTTP_USER_AGENT"], $match) != 0) {}
Run Code Online (Sandbox Code Playgroud)
因为有时您可以看到像这样的用户代理
像Gecko一样的Mozilla/5.0(Windows NT 6.3; WOW64; Trident/7.0; ASU2JS; rv:11.0)