gpt4 book ai didi

php - User agent header - mysql存储的缩写

转载 作者:可可西里 更新时间:2023-11-01 08:05:49 26 4
gpt4 key购买 nike

根据这个线程,特别是这个帖子:https://stackoverflow.com/a/6595973/1125465 ,微软一如既往地炫耀。用户代理的大小可能非常非常大。

我正在用 php 开发一个小型访客库,我想存储用户代理信息。我无法决定数据类型和长度。

所以我的问题是:关于如何将用户代理缩短到某个“正常”大小,您有什么想法吗? (例如 256 个字符)


注意:开发人员使用用户代理来检测用户浏览器和操作系统。所以根据链接的例子,所有来自 M$ 的愚蠢数字都只是......只是。一如既往,让我们心烦意乱。 因此,我们的想法是制作一个缩短用户代理字符串但又不会丢失重要信息的函数。

我认为这样的功能应该:

  • 不依赖于 future 的更新和新浏览器(无硬编码字符串)
  • 有一个简单的机制来决定删除什么(例如,如果有一个数字,逗号,数字,逗号,数字,逗号,数字,......,它可以删除它,这并不有趣)。
  • 最后,如果所有操作仍然导致用户代理太长(比如 256 个字符),那么就没有什么可做的了,所以只需切断其余部分即可。这是百万分之一,因此数据可能会丢失。

附加说明:我知道,我可以创建一个函数,从用户代理获取浏览器和操作系统类型,并仅保存这些值。但是像往常一样,这样的函数有硬编码的名称,如果无法识别浏览器,它会返回“无法识别的浏览器”。所以将来每个人都必须记住更新这些函数。如果我们保存缩短用户代理,信息是丢失(因为只有读取数据库的脚本必须有新的识别系统)。但数据库中的条目是可靠和一致的,应该是。


更新:因为应该有一些代码,而且想法有问题,而不是现有代码的问题,所以我会写一些我到目前为止写的最少的代码;):

<?php
function shorten($useragent, $maxsize = 256) {
$shorten = $useragent;
... // ?
$shorten = substr($shorten, 0, $maxsize); // the "last hope" cut
return $shorten;
}
echo shorten($_SERVER['HTTP_USER_AGENT']);
?>

最佳答案

User-Agent 字符串没有规则,因此无法创建完全正确且面向 future 的解析器。不过有一个通用模式:

User-Agent: <engine-string> <engine-string> ...

engine-string 的形式:

<agent-name> (<comment>; <comment>; ...)

每个引擎字符串(我只是根据我的理解调用它,这可能不正确)可能有也可能没有评论。

例如:

Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) ↲
AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e ↲
Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

(这是一个单一的字符串,我只是把它分成几行。)似乎,每当有人对浏览器引擎进行 fork 时,他们只是将他们的东西附加到最后。所以我们有一些抽象的“Mozilla”浏览器(“第一次浏览器大战”的遗产)认为它在 iPhone 上。然后我们看到有一个 WebKit(它记得很久以前它是作为 KHTML 诞生的)。然后是Version/6.0的一些修改,然后修改成Mobile/10A5376e,变成Safari/8536.25,终于揭开了它其实是一个移动谷歌bot的 secret 。

另一个例子:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; ↲
InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; ↲
.NET CLR 3.5.30729; .NET CLR 1.1.4322)

这是一个单一的引擎,但它在括号中有很多话要说。

所以一般的观察是:

  • 最后的引擎字符串最重要,
  • 括号中的最后评论不太重要。

考虑到这一点,我的想法是将字符串解析为这些引擎和评论标记,然后从每个引擎部分丢弃评论,比如从第五个开始。然后,如果仍然不够,从第二个开始扔掉引擎部分(第一个通常是抽象的“Mozilla”,但通常有有用的评论;有时它实际上是具体的东西,特别是对于网络爬虫)。

在解析时,我们需要考虑到偶尔可能会有不遵循这种格式的字符串。它们可以保存到日志文件中供以后检查,然后简单地剪切成所需的长度以适合数据库。

关于php - User agent header - mysql存储的缩写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23742935/

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