PHP判断电脑与手机访问端并加载对应样式的实现

小鹿同学
小鹿同学
发布时间:2026-10-14 | 6人浏览过
原创

在使用传统PHP开发时,有时需要根据访客使用的设备(电脑或手机)加载不同的CSS样式,以确保网页在不同终端上的正常显示。核心方法是读取服务器变量中的User-Agent信息,结合WAP协议特征进行匹配判断。

实现原理

判断设备类型主要依赖两个维度的数据:

  1. WAP协议支持:旧式移动浏览器通常会发送包含 VND.WAP.WML 的Accept头,表明其支持无线标记语言。
  2. User-Agent特征库:现代智能设备(Android, iOS等)会在 $_SERVER['HTTP_USER_AGENT'] 中暴露特定的品牌、系统名或分辨率特征(如 Nokia, iPhone, Symbian 等)。

具体操作步骤

第1步:定义子字符串辅助函数

为了高效比对设备列表,首先需要编写一个遍历数组并在目标字符串中查找匹配项的辅助函数。该函数用于避免重复代码,提高可读性。

function checkSubstrs($list,$str){
    $flag = false;
    for($i=0;$i<count($list);$i++){
        if(strpos($str,$list[$i]) > 0){
            $flag = true;
            break;
        }
    }
    return $flag;
}

第2步:构建主检测函数

创建 check_wap() 函数,依次检查特殊的网关头、WML支持以及移动设备关键字。如果检测到任何移动端特征,则返回 true。

function check_wap() { 
    // 检查是否存在WAP网关相关的头信息
    if (isset($_SERVER['HTTP_VIA'])) return true; 
    if (isset($_SERVER['HTTP_X_NOKIA_CONNECTION_MODE'])) return true; 
    if (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID'])) return true; 
    
    // 检查是否接受WML格式(常见于早期wap手机)
    if (strpos(strtoupper($_SERVER['HTTP_ACCEPT']),"VND.WAP.WML") > 0) {
        $br = "WML";
    } else {
        // 获取并清理User-Agent字符串
        $browser = isset($_SERVER['HTTP_USER_AGENT']) ? trim($_SERVER['HTTP_USER_AGENT']) : '';
        if(empty($browser)) return true;
        
        // 移动操作系统关键字列表
        $mobile_os_list=array('Google Wireless Transcoder','Windows CE','WindowsCE','Symbian','Android','armv6l','armv5','Mobile','CentOS','mowser','AvantGo','Opera Mobi','J2ME/MIDP','Smartphone','Go.Web','Palm','iPAQ');
        
        // 移动设备及终端令牌列表
        $mobile_token_list=array('Profile/MIDP','Configuration/CLDC-','160×160','176×220','240×240','240×320','320×240','UP.Browser','UP.Link','SymbianOS','PalmOS','PocketPC','SonyEricsson','Nokia','BlackBerry','Vodafone','BenQ','Novarra-Vision','Iris','NetFront','HTC_','Xda_','SAMSUNG-SGH','Wapaka','DoCoMo','iPhone','iPod');
        
        // 执行匹配检测
        $found_mobile=checkSubstrs($mobile_os_list,$browser) || 
            checkSubstrs($mobile_token_list,$browser); 
            
        if($found_mobile)
            $br ="WML";
        else 
            $br = "WWW";
    } 
    
    // WML标识代表移动端,否则为PC端
    if($br == "WML") { 
        return true; 
    } else { 
        return false; 
    } 
}

第3步:根据检测结果加载样式

在HTML头部引入该函数,并根据返回值输出对应的CSS链接。例如,若为移动端则引入手机版样式表,反之引入PC版。

<?php 
if(check_wap()){
    // 手机端样式
    echo '<link rel="stylesheet" href="style-mobile.css" />';
}else{
    // PC端样式
    echo '<link rel="stylesheet" href="style-pc.css" />';
}
?>

注意事项

  • 维护成本:此方法基于硬编码的关键字匹配,随着新机型推出,可能需要定期更新 $mobile_token_list 和 $mobile_os_list 以确保证保识别率。
  • 局限性:部分平板设备或新型浏览器可能模拟User-Agent伪装成PC端,导致误判。对于追求极致体验的现代项目,建议优先采用CSS媒体查询(Media Queries)进行响应式设计。

以上就是PHP判断电脑访问与手机访问并分别加载样式的详细内容,更多关于PHP UA检测的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表