最近在開發專案的時候,分別開發了PC端和手機端,需要實現,用手機訪問PC端WWW域名的時候,自動判斷跳轉到移動端,用電腦訪問M域名手機網站的時候,自動跳轉到PC端網站,於是有了下面這個判斷函式:
/**
* 移動端判斷
*/
function isMobile()
{
// 如果有HTTP_X_WAP_PROFILE則一定是移動裝置
if (isset ($_SERVER[`HTTP_X_WAP_PROFILE`]))
{
return true;
}
// 如果via資訊含有wap則一定是移動裝置
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;
}