最近移動互聯網火爆了我們需要做一個PC站與WAP站,要實現如果用戶是電腦訪問WAP站就自動進入PC站,反之一樣,下面我整理了一些代碼與大家一起來看看.
方法一,判斷HTTP_USER_AGENT,代碼如下:
- $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
- if(strpos($agent,"netfront") || 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("HTTP/1.1 301 Moved Permanently");
- header("Location:####"); die;
- }
方法二,判斷HTTP_ACCEPT,代碼如下:
- if (isset($_SERVER['HTTP_ACCEPT']) && (strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')!==FALSE) &&(strpos($_SERVER['HTTP_ACCEPT'],'text/html')===FALSE || (strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml') <
- strpos($_SERVER['HTTP_ACCEPT'],'text/html')) )) {//手機訪問
- Header("HTTP/1.1 301 Moved Permanently");
- header("Location:####"); die;
- }
以上兩個方法都有局限性,下面將此兩種方法整合起來判斷,代碼如下:
- function isMobile() {
- if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
- return true;
- }
- if(isset ($_SERVER['HTTP_VIA'])) {
- //找不到為flase,否則為true
- return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
- }
- if(isset($_SERVER['HTTP_USER_AGENT'])) {
- //此數組有待完善
- $clientkeywords = array (
- 'nokia',
- 'sony',
- 'ericsson',
- 'mot',
- 'samsung',
- 'htc',
- 'sgh',
- 'lg',
- 'sharp',
- 'sie-',
- 'philips',
- 'panasonic',
- 'alcatel',
- 'lenovo',
- 'iphone',
- 'ipod',
- 'blackberry',
- 'meizu',
- 'android',
- 'netfront',
- 'symbian',
- 'ucweb',
- 'windowsce',
- 'palm',
- 'operamini',
- 'operamobi',
- 'openwave',
- 'nexusone',
- 'cldc',
- 'midp',
- 'wap',
- 'mobile'
- );
- // 從HTTP_USER_AGENT中查找手機瀏覽器的關鍵字
- if(preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
- return true;
- }
- }
- //協議法,因為有可能不準確,放到最后判斷
- if (isset ($_SERVER['HTTP_ACCEPT'])) {
- // 如果只支持wml并且不支持html那一定是移動設備
- // 如果支持wml和html但是wml在html之前則是移動設備
- if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
- return true;
- }
- }
- return false;
- }
上面的方法也存在一些小問題,這里我根據自己的經驗來告訴大我們可以使用屏幕寬度來實現再加機器類型了,因為有時HTTP_USER_AGENT信息在我們上面并未定義過了,不過上面實現幾乎兼容了主流手機了.
我們還可以使用js:
- <html>
- <body>
- <script type="text/javascript">
- function browserRedirect() {
- var sUserAgent = navigator.userAgent.toLowerCase();
- var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
- var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
- var bIsMidp = sUserAgent.match(/midp/i) == "midp";
- var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
- var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
- var bIsAndroid = sUserAgent.match(/android/i) == "android";
- var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
- var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
- if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
- window.location.href = 'http://url/mobile.html';
- } else {
- window.location = 'http://url/pc.html';
- }
- }
- browserRedirect();
- </script>
- </body>
- </html>
新聞熱點
疑難解答