用户代理标头 - mysql 存储的缩写

2023-12-24

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

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

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


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

我认为这样的功能应该:

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

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


UPDATE:由于应该有一些代码,并且想法有问题,而不是现有代码的问题,所以我将编写一些迄今为止编写的最小代码;):

<?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 字符串没有规则,因此无法创建完全正确且面向未来的解析器。但有一个一般模式:

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

Where 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)

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

另一个例子:

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”,但通常有有用的注释;有时它实际上是具体的东西,特别是对于网络爬虫而言)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户代理标头 - mysql 存储的缩写 的相关文章

  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • Powershell日期类型无法找到

    我正在尝试使用PowerShell连接virustotal API 代码来自virustotal网站 我得到 无法找到类型 System Security Cryptography ProtectedData 错误信息 代码如下 funct
  • 在SQL中,如何通过查找与某一列相等的所有行来更新表的每一行,然后将另一列设置为彼此相等

    所以基本上这就是伪代码 但我不知道如何在 SQL 中执行此操作 请帮忙 for each row in table1 loop through each row in table 2 if table1 s row column 1 tab
  • php 邮件特殊字符 utf8

    我有以下脚本 在电子邮件中 主题 Testmail Special Characters Body Hi there this isn t somet
  • 动态创建和下载Doc文件

    因此 我尝试动态创建 doc 文件并让用户在单击按钮时下载该文件 这些是我找到的用于下载文件的标头 header Content Description File Transfer header Content Type applicati
  • 使用 Mock 对 Laravel 5 Mail 进行单元测试

    有没有办法在 Laravel 5 中测试 Mail 尝试了我在互联网上看到的唯一合法的模拟示例 但它似乎只适用于 Laravel 4 下面的当前代码 mock Mockery mock Swift Mailer this gt app ma
  • 为什么我的 PHP 脚本无法对其创建的文件进行 chmod?

    我有一个 php 创建一个需要可执行的文件 它是一个需要由系统运行的批处理文件 由于某种原因 即使该文件归 apache 所有并且 php 作为 apache 运行 并且创建了该文件 该脚本还是在 chmod 行处终止 我需要进行哪些不同配
  • 将 PayPal 返回 URL 设置为 localhost

    我正在尝试集成 Paypal 并且在此过程中使用沙箱 我按照以下问题中接受的答案的步骤进行操作 设置 PayPal 返回 URL 并使其自动返回 https stackoverflow com questions 7642895 setti
  • laravel 5.3 新的 Auth::routes()

    最近开始使用laravel 5 3写博客 但是运行后出现一个问题php artisan make auth 当我运行这个时 它会在我的web php 这是其中的代码 Auth routes Route get home HomeContro
  • 从 PHP 生成渐变颜色

    我想知道如何构建一个给出颜色代码和 显示该颜色的渐变 例如 function generate color int colorindex Generate 10 pale colors of this color 请帮我 迈克尔引用的代码相
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • IN 子查询中的 GROUP_CONCAT

    SELECT A id A title FROM table as A WHERE A active 1 AND A id IN SELECT GROUP CONCAT B id from B where user 3 如果我启动子查询SE
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • Apache 虚拟主机始终重定向到 /dashboard

    我遇到的问题似乎是一个常见问题 但我找到的任何解决方案似乎都不适合我的情况 我正在尝试设置一个虚拟主机 以便我可以通过 mytestdomain local 访问我的 Laravel 安装的公共文件 但是当我在 google chrome
  • Oracle Blob 在 PHP 页面中作为 img src

    我有一个网站当前使用文件服务器上的图像 这些图像显示在页面上 用户可以根据需要拖放每个图像 这是使用 jQuery 完成的 图像包含在列表中 每张图片都非常标准 img src network path image png height 8
  • Microsoft VS Code:当我尝试启动程序时,出现错误“spawn php ENOENT”

    我正在尝试在 Microsoft VS Code 上运行 PHP 代码 当我单击启动时 唯一发生的事情是调试控制台中出现错误 生成 php ENOENT 为了解决这个问题 我将 XDebug 的 dll 文件放入 ext 文件夹中 我将 p
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 从关系中合并 Laravel 中的集合

    假设我有 3 张桌子 Images Subject Style 关系是多对多 图像 主题 和多对多 图像 样式 现在我想做一些类似的事情 result subjectResult gt images gt merge styleResult
  • 计算特定产品类别的购物车商品数量

    我试图仅从 WooCommerce 中的特定产品类别获取购物车中的商品数量 我正在为一家酒厂做一个网站 它有酒精和非酒精产品 所有葡萄酒都属于 葡萄酒 主类别或类别 ID 34 其下有许多子类别和产品 对于属于此类别的任何商品 我需要知道此
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql

随机推荐

  • 无法加载 YouTube 缩略图的网络图像 Flutter Web

    我正在尝试在我最新的 Flutter 项目中实现 Youtube Plyr IFrame 插件 https pub dev packages youtube plyr iframe https pub dev packages youtub
  • Windows 7 CMD 中的 UTF-8 [重复]

    这个问题在这里已经有答案了 我尝试在win7 cmd中显示UTF 8 目前 我正在使用标准字体 因为正如我在 mysql exe 中看到的那样 它与我正在使用的字符 目前是德语元音 配合得很好 另外 使用另一种字体时 会出现相同的字符 但我
  • 如何在 WSO2 ESB 中按故障顺序访问此消息?

    如何访问来自 WSO2 ESB 故障序列 ERROR CODE 中 wso2dss 端标准错误的错误文本 我已经正常了 但是这个 ERROR MESSAGE 给出了 NULL 我怎样才能做到这一点 这是 WSO2DSS 标准错误消息
  • Android Studio - processDebugResources 失败

    所以我尝试在 Android Studio 中构建我的项目 但是每次加载或执行该项目时 我都会收到以下错误 我不知道如何解决这个问题 Execution failed for task oefening1 processDebugResou
  • Visual Studio 2012 C++ 你好世界 - iostream 不工作

    我对 Visual Studio 2012 有疑问 我还在使用 Sams Teach Yourself C in One Hour a day 7th Edition 在使用 google 找到 最佳 C 编译器之后 Visual Stud
  • Typescript 数组接口,具有编号索引和可通过字符串键访问的自定义属性

    我想要一个按数字索引的对象数组 并将数组上的所有对象放在特定键下 像这样的事情 const myArray ICustomArray myArray push item myArray item key item 但我正在努力定义它的界面
  • android:市场活动的反应

    我正在尝试制作一个应用程序 打开所选应用程序的 Android 市场页面并让用户下载它 我已使用以下意图来打开市场 Intent intent new Intent Intent ACTION VIEW intent setData Uri
  • 带有ContinueWith的TaskCanceledException

    我一直在试图找出为什么最近开始出现异常的一些异步代码会出现 TaskCanceledException 异常 我已将问题简化为一个让我摸不着头脑的小代码片段 static void Main string args RunTest priv
  • 在 PHP array_walk 中按引用传递第三个参数,没有警告

    有没有办法让这段代码在没有警告的情况下工作 function myFunction value key array if strlen value lt 2 array key value a array aa bbb cc dd resu
  • Angular CLI 插件

    Ember CLI 有一个命令 ember addon
  • 在 Android 中结束通话

    我试图在几秒钟后结束新的拨出呼叫 这是我的代码 public class phonecalls extends Activity ComponentName cn Called when the activity is first crea
  • 构建类似 Facebook 的个性化新闻源:SQL、MongoDB?

    我正在构建一个类似 Facebook 的新闻源 这意味着它是由许多 SQL 表构建的 并且每种数据类型都有特定的布局 但它的负载变得非常重 我希望让它变得更加复杂 这就是我现在所做的 用户模型 def updates more option
  • 将表情符号添加到 Hugo 页面变量

    如何将表情符号添加到 Hugo 页面变量 例如 在以下代码片段的标题中 date 2016 11 20T12 00 00 draft false tags Fun title Went sporting heart Hugo 有两种处理表情
  • 在 ruby​​ on Rails 中包含 httparty 时出现问题

    我一直在尝试在我的 Rails 代码中使用 HTTParty sudo gem install httparty 从命令行我现在可以成功地执行 httparty http twitter com statuses public timeli
  • 如何在 PostgreSQL 中进行仅模式备份和恢复?

    如何在 PostgreSQL 数据库中进行架构级备份并在另一个数据库上恢复 有没有可用的单个命令 例如 我可以在单行中进行 pg dump 和恢复吗 pg dump schema masters oldDB gt masters1 sql
  • 如何正确缓存我的 Symfony2 API?

    我正在 Symfony2 上制作经典的无状态 RESTfull API 用户 应用程序在身份验证 API 上获取身份验证令牌 并将其提供给所有其他 API 进行记录并发布数据 访问其他 API 上的受保护 私有 个人数据 我现在对这个工作流
  • 没有 $unwind 的 $group 内部数组值

    我想按指定字段的相同值对数组中的对象进行分组并生成计数 我有以下 mongodb 文档 不存在不相关字段 arrayField fieldA value1 otherFields fieldA value2 otherFields fiel
  • 如何创建收益递减的公式?

    我想这是一个数学问题 而不是一个编程问题 但是创建收益递减公式的好方法是什么 以下是一些关于我希望曲线看起来如何的示例点 f 1 1 f 1 5 98 f 2 95 f 2 5 9 f 3 8 f 4 7 f 5 6 f 10 5 f 20
  • 对相关包进行排序

    我有一个 Pig 脚本 它生成了一个关系 A x chararray B y chararray z int 我想根据 B y 对 A 进行排序 但是以下代码给了我错误 语法错误 z 处或附近出现意外符号 output foreach A
  • 用户代理标头 - mysql 存储的缩写

    根据这个帖子 特别是这篇文章 https stackoverflow com a 6595973 1125465 https stackoverflow com a 6595973 1125465 微软一如既往地炫耀 用户代理的大小可能非常