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

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

在使用传统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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。