如果你有来自手机界面的访问者,你很可能需要将他们引导至一个不同的页面,一个特别为手机浏览器优化的界面。
1.在页面头部添加判断
通过PHP和浏览器头信息,我们可以轻松地实现将手机用户转向经过专门设计的WAP界面。我恰好使用了WP-T-WAP插件实现了界面的WAP化,WAP浏览的地址是http://mkaifa.com/wap。(你可以尝试浏览这个地址,它可以在电脑上被打开。真抱歉,我现在用的是MobilePress,没有演示了,MobilePress可以自动判断访问者的浏览器。)
我希望手机访客在打开http://mkaifa.com/地址时,自动导向http://mkaifa.com/wap。怎么办呢?
答案非常简单。
打开header.php文件。在第一行插入以下代码:
< ?php
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strpos($agent,"comFront") || strpos($agent,"iPhone") || strpos($agent,"MIDP-2.0") || strpos($agent,"Opera Mini") || strpos($agent,"UCWEB") || strpos($agent,"Android") || strpos($agent,"Windows CE") || strpos($agent,"SymbianOS"))
header("Location:http://mkaifa.com/wap");
?>
这段代码的含义是,当浏览器返回的UA信息为Opera Mini、UCWEB等内容时,将页面转向http://mkaifa.com/wap。
1.1 补充:增加手机浏览器的跳转提示
当你使用上面的方法设置跳转时,可能会遇到这种状况:手机访问者直接访问类似http://mkaifa.com/archive/xxx的子页面,而不是首页。这时,改判断语句仍然会执行命令,将手机访问者引导至手机界面的首页,使访客无法获取想要的信息。
怎么办呢?
你可以在这段语句之外再加入一个判断,只有在当前页面为首页时执行此命令。
在WordPress环境下这个判断的写法是
<?php if ( is_home() ) { ... }?>
那么全部的代码是:
<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
if ( is_home() && ((strpos($agent,"comFront") || strpos($agent,"iPhone") || strpos($agent,"MIDP-2.0") || strpos($agent,"Opera Mini") || strpos($agent,"UCWEB") || strpos($agent,"Android") || strpos($agent,"Windows CE") || strpos($agent,"SymbianOS")) )
header("Location:http://mkaifa.com/wap");
}
?>
这样我们又遇到一个问题:手机访问者在浏览子页面时,并不知道你提供了WAP界面,而你恰恰又很希望推销的你的WAP界面。
我们可以修改这个判断语句,让它不再直接跳转,而是在特定浏览器下显示提示信息,告诉手机用户可以转换至WAP界面浏览。
代码写法如下:
<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strpos($agent,"comFront") || strpos($agent,"iPhone") || strpos($agent,"MIDP-2.0") || strpos($agent,"Opera Mini") || strpos($agent,"UCWEB") || strpos($agent,"Android") || strpos($agent,"Windows CE") || strpos($agent,"SymbianOS")) { ?>
<div id="mobile"><p>系统检测到您正在使用手机浏览器,您可以访问<a href="http://mkaifa.com/wap">移动界面</a>以获取更好的浏览体验。</p></div>
<?php } ?>
当然了,你可以综合这两种方法,让手机访客在访问首页时自动跳转,而访问其他界面时显示提示信息。
2.需要足够的手机浏览器UA信息
当浏览器访问页面时,它会向服务器提交一个标志字符,这段字符被称作UA(User Agent),他们看起来大概是这个样子:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) )
是的,UA很长,甚至还包含了系统信息。但是当我们进行判断时,只需要核对最关键的字符。比如我需要判断当前用户是否使用了IE 8(我的确就是用的IE8),那么 在上面的判断语句中就应该写成strpos($agent,”MSIE 8.0″) 。
我准备了8种最常见的浏览器/平台分别是comFront、iPhone、JAVA(MIDP-2.0)、Opera Mini、UCWEB、Android、Windows CE/Mobile、SymbianOS。就目前的状况来说,这8种平台已经包含了国内几乎全部的手机访客,当然,完整的手机浏览客户端列表不止这么多,我罗列一些:
2.0 MMP, 240×320, 400X240, AvantGo, BlackBerry, Blazer, Cellphone, Danger, DoCoMo, Elaine/3.0 EudoraWeb, Googlebot-Mobile, hiptop, IEMobile, KYOCERA/WX310K, LG/U990, MIDP-2., MMEF20, MOT-V, comFront, Newt, Nintendo Wii, Nitro, // Nintendo DS Nokia, Opera Mini, Palm, PlayStation Portable, portalmmm, Proxicom, Proxicom, SHARP-TQ-GX10, SHG-i900, Small, SonyEricsson, Symbian OS, SymbianOS, TS21i-10, UP.Browser, UP.Link, webOS, // Palm Pre, etc. Windows CE, WinWAP, YahooSeeker/M1A1-R2D2
你可以根据这个列表添加或替换上面的PHP判断语句。但是我仍然推荐我已经选好的8种平台,因为目前会使用手机浏览互联网——特别是个人博客的用户,基本上都是高端玩家。
另外你可以写一个简单的页面,用来判断你的手机UA
<?phpecho $_SERVER['HTTP_USER_AGENT']; ?>
保存为ua-test.php,上传至服务器,用你的手机访问这个页面。