gpt4 book ai didi

php - PHP-从User-Agent获取确切的iOS版本

转载 作者:行者123 更新时间:2023-12-01 17:47:01 25 4
gpt4 key购买 nike

我想从User-Agent获取PHP的确切iOS版本。我很清楚伪造用户代理的可能性,但就我而言,这不是问题。

普通的iPhone用户代理字符串如下所示:

Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1

如何从中提取操作系统版本?在这种情况下,它是“11_2_1”。我必须能够从iPhone,iPad和iPod用户代理中提取它。也可以是X_X而不是X_X_X。

到目前为止,我得到了:
<?php
$version = preg_match('(iPad|iPhone|iphone|iPod).*?(OS |os |OS\_)(\d+
((_|\.)\d)?((_|\.)\d)?)', $_SERVER['HTTP_USER_AGENT']);
echo $version;
?>

但是,从iPhone访问它会显示空白页。有谁可以帮助我吗?

提前致谢。

最佳答案



您可以执行多个正则表达式来获取操作系统版本。以下正则表达式可能是最快的:

See regex in use here

ip(?:hone|[ao]d) os \K[\d_]+

注意:这些正则表达式都使用 i标志。

也可以使用其他变体,例如:
i(?:phone|pad|pod) os \K[\d_]+
i(?:phone|pad|pod) os ([\d_]+)

用法

See code in use here
<?php

$re = '/ip(?:hone|[ao]d) os \K[\d_]+/i';
$str = 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
var_dump($matches);

注意:要分隔结果中的每个版本,您可以使用以下行 as shown here:
var_dump(explode("_", $matches[0][0]));

用法-使用OP的代码
<?php

$re = '/ip(?:hone|[ao]d) os \K[\d_]+/i';
preg_match($re, $_SERVER['HTTP_USER_AGENT'], $matches, PREG_OFFSET_CAPTURE, 0);
var_dump($matches);

结果

输入项
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1

输出量

输出匹配:
11_2_1

explode()上输出与 _ 的匹配项(见第一个 用法部分下的注释):
11
2
1

说明
  • ip从字面上匹配
  • (?:hone|[ao]d)匹配以下任一
  • hone逐字匹配(使iphone)
  • [ao]d匹配ao,然后匹配d(使ipadipod)
  • 匹配文字空间字符
  • os从字面上匹配
  • 匹配文字空格字符。我注意到OP也有OS\_,这使我认为这里可能有下划线字符。如果是这样的话this can be changed to [ _] instead
  • \K重置比赛的起点。最终匹配
  • 中将排除所有以前消耗的字符
  • [\d_]+匹配任何一个或多个数字或下划线字符
  • 关于php - PHP-从User-Agent获取确切的iOS版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009956/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com