$_SERVER['HTTP_USER_AGENT']
变量,并结合正则表达式进行匹配。,,以下是一个简单的示例代码:,,``php,function isMobileDevice() {, $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);, $mobileAgents = [, 'iphone', 'ipad', 'android', 'blackberry', 'nokia', 'opera mini',, 'windows mobile', 'iemobile', 'mobile', ];,, foreach ($mobileAgents as $agent) {, if (strpos($userAgent, $agent) !== false) {, return true;, }, },, return false;,},,if (isMobileDevice()) {, echo "User is accessing from a mobile device.";,} else {, echo "User is accessing from a desktop computer.";,},
`,,这个函数会遍历常见的移动设备用户代理字符串,如果匹配到任何一个,就返回
true,否则返回
false`。在ECShop中,判断来访用户是否来自手机的方法主要依赖于分析HTTP请求头中的User-Agent字符串,以下是详细的步骤和示例代码:
方法一:基于User-Agent字符串的正则表达式匹配
1、获取User-Agent字符串:
通过$_SERVER['HTTP_USER_AGENT']
获取用户的User-Agent字符串。
2、定义正则表达式:
使用正则表达式来匹配常见的手机品牌和操作系统,诺基亚、索尼、爱立信、摩托罗拉、三星等。
3、执行正则匹配:
使用preg_match()
函数进行匹配,如果匹配成功,则说明用户来自手机设备。
4、判断是否为WAP代理:
检查$_SERVER['REQUEST_URI']
中是否包含'wap',以排除WAP代理的情况。
5、跳转到手机页面:
如果用户来自手机,则跳转到相应的手机页面。
示例代码:
$ua = strtolower($_SERVER['HTTP_USER_AGENT']); $uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|cldc|midp|coolpad|k-touch|tcl|oppo|doov|amoi|bbk|cect|amoi|zte|huawei|iphone|ipad|android|smartphone)/i"; if (($ua == '' || preg_match($uachar, $ua)) && !strpos(strtolower($_SERVER['REQUEST_URI']), 'wap')) { $Loaction = 'mobile/'; if (!empty($Loaction)) { ecs_header("Location: $Loaction "); exit; } }
方法二:改良版——先判断是否为老式手机,再判断智能机系统
1、获取User-Agent字符串:
同上。
2、检查是否接受WML:
使用strpos(strtoupper($_SERVER['HTTP_ACCEPT']), "VND.WAP.WML")
检查浏览器是否接受WML格式。
3、定义更全面的正则表达式:
扩展正则表达式以包括更多手机型号和操作系统。
4、执行正则匹配:
使用preg_match()
函数进行匹配。
5、跳转到不同版本的手机页面:
根据不同的匹配结果,跳转到相应的手机页面。
示例代码:
$ua = strtolower($_SERVER['HTTP_USER_AGENT']); if (strpos(strtoupper($_SERVER['HTTP_ACCEPT']), "VND.WAP.WML") > 0) { $Loaction = 'mobile1/'; } else { $uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|cldc|midp|coolpad|k-touch|tcl|oppo|doov|amoi|bbk|cect|amoi|zte|huawei|iphone|ipad|android|smartphone|blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i"; if (($ua == '' || preg_match($uachar, $ua)) && !strpos(strtolower($_SERVER['REQUEST_URI']), 'wap')) { $Loaction = 'mobile/'; } } if (!empty($Loaction)) { ecs_header("Location: $Loaction "); exit; }
相关问题与解答
问题1:为什么要判断用户是否来自手机?
答:判断用户是否来自手机是为了提供更好的用户体验,通过识别用户的设备类型,可以自动将用户重定向到适合其设备显示的网站版本,从而优化访问体验和提高网站可用性。
问题2:如何确保正则表达式覆盖所有可能的手机型号?
答:为了确保正则表达式尽可能全面地覆盖各种手机型号,可以参考最新的设备数据库和User-Agent字符串库,定期更新和维护正则表达式也是非常重要的,因为新的设备和操作系统会不断出现。