解析类似电子邮件的标头(类似于 RFC822)

2023-11-26

问题/问题

有一个机器人信息数据库我想解析一下。据说是类似于 RFC822 消息.

在我重新发明轮子并编写自己的解析器之前,我想我应该看看是否还有其他可用的东西。我偶然发现imap_rfc822_parse_headers(),这似乎正是我想要的。不幸的是,IMAP 扩展在我的环境中不可用。

我在网上和 Stack Overflow 上看到了很多替代方案。不幸的是,它们都是为电子邮件而构建的,并且做的事情超出了我的需要......经常解析整个电子邮件并以特殊方式处理标头。我只想简单地将这些标头解析为有用的对象或数组。

有没有直接的 PHP 版本imap_rfc822_parse_headers()可用,或者类似的东西可以解析这样的数据?如果没有,我会自己写。

样本数据

robot-id: abcdatos
robot-name: ABCdatos BotLink
robot-from: no
robot-useragent: ABCdatos BotLink/1.0.2 (test links)
robot-language: basic
robot-description: This robot is used to verify availability of the ABCdatos
                   directory entries (http://www.abcdatos.com), checking
                   HTTP HEAD. Robot runs twice a week. Under HTTP 5xx
                   error responses or unable to connect, it repeats
                   verification some hours later, verifiying if that was a
                   temporary situation.
robot-history: This robot was developed by ABCdatos team to help
               working in the directory maintenance.
robot-environment: commercial
modified-date: Thu, 29 May 2003 01:00:00 GMT
modified-by: ABCdatos

robot-id:                       acme-spider
robot-name:                     Acme.Spider
robot-cover-url:                http://www.acme.com/java/software/Acme.Spider.html
robot-exclusion:                yes
robot-exclusion-useragent:      Due to a deficiency in Java it's not currently possible to set the User-Agent.
robot-noindex:                  no
robot-host:                     *
robot-language:                 java
robot-description:              A Java utility class for writing your own robots.
robot-history:                  
robot-environment:              
modified-date:                  Wed, 04 Dec 1996 21:30:11 GMT
modified-by:                    Jef Poskanzer

...

假如说$data包含您上面粘贴的示例数据,这是解析器:

<?php

/* 
 * $data = <<<'DATA'
 * <put-sample-data-here>
 * DATA;
 *
 */

$parsed  = array();
$blocks  = preg_split('/\n\n/', $data);
$lines   = array();
$matches = array();
foreach ($blocks as $i => $block) {
    $parsed[$i] = array();
    $lines = preg_split('/\n(([\w.-]+)\: *((.*\n\s+.+)+|(.*(?:\n))|(.*))?)/',
                        $block, -1, PREG_SPLIT_DELIM_CAPTURE);
    foreach ($lines as $line) {
        if(preg_match('/^\n?([\w.-]+)\: *((.*\n\s+.+)+|(.*(?:\n))|(.*))?$/',
                      $line, $matches)) {
            $parsed[$i][$matches[1]] = preg_replace('/\n +/', ' ',
                                                    trim($matches[2]));
        }
    }
}

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

解析类似电子邮件的标头(类似于 RFC822) 的相关文章

随机推荐

  • CXF RESTful 客户端 - 如何信任所有证书?

    我写过 Jersey RESTful 客户端 它使用了DumbX509TrustManager 和 HostnameVerifier 信任我们实验室系统上的所有 SSL 证书 以便更轻松地处理自签名证书 ClientConfig confi
  • 如何在 Safari 和 NSTextView 等 Web 视图中突出显示搜索结果 showFindIndicatorForRange:

    在 Safari 和 OSX 上的 NSTextView 中 搜索结果可以用带有一点动画弹出的亮黄色框突出显示 有没有什么方法可以在网络视图中做到这一点 而无需自己编码 我确实找到了一种方法来做到这一点 See 显示范围查找指示器
  • 四叉树最近邻算法

    我已经实现了 n 个点的四叉树结构以及返回给定矩形内的点数组的方法 我似乎无法找到一种算法来有效地找到最接近另一个给定点的点 我错过了一些明显的事情吗 我认为递归解决方案是正确的方法吗 我正在使用 Objective C 但伪代码就可以了
  • 之间的区别?

    每次我必须为带有 IIS7 的 ASP NET 添加处理程序或模块时 说明总是告诉我将其合并为两个部分 system web and system webserver
  • 尝试创建新的 Google API 项目时出现 FAILED_PRECONDITION

    我在尝试为 Google API 创建新项目时遇到错误https code google com apis console 我希望错误是暂时的 但我已经有几周无法创建新项目了 该错误似乎已发生变化 因为它过去包含服务器 IP 信息和许多其他
  • PHP - 摆脱大写撇号

    我试图摆脱卷曲的撇号 我想是从某种富文本文档粘贴的撇号 但我似乎遇到了障碍 下面的代码对我不起作用 word Today s search array 8222 8220 146 replace array word str replace
  • R 中 data.frame 长度不同的列表列表

    我在 SO 中读到了很多关于将列表列表转换为 df 的答案 但是 我注意到它们的列表长度 在主大列表内 都是相同的 我有一个不同的案例 h1 lt list USA c 10 13 17 11 RUSSIA NULL BRAZIL NULL
  • 如何更改禁用的文本框的字体颜色?

    有谁知道哪个属性设置禁用控件的文本颜色 我必须在禁用状态下显示一些文本TextBox我想将其颜色设置为黑色 NOTE 请参阅下面 Cheetah 的答案 因为它确定了使该解决方案发挥作用的先决条件 设置BackColor of the Te
  • 在 PHP 循环中构建逗号分隔的字符串

    大家好 我需要这样做 我有一个共同的循环 foreach stuffs as stuff echo stuff 假设 stuff 是我拥有的 mysql 表的 id 并且我不想在下一个结果中显示 所以我想构建一个像这样的字符串 1 23 5
  • 有人可以解释互斥体及其使用方法吗?

    我读了一些有关互斥体的文档 但我唯一的想法是它有助于防止线程访问已被另一个资源使用的资源 我从代码片段中获取并执行 效果很好 include
  • Flutter:流已被收听[重复]

    这个问题在这里已经有答案了 我正在使用 BLoC 从 Firestore 加载预设对象 这是我的块模型 class StatisticsBloc extends BlocBase List
  • Android 中的 requestLocationUpdates 间隔

    我尝试获得 onLocationChanged 函数的正确更新速度 这是我的课程 public class LocationService extends Service implements LocationListener 将 minT
  • 用于组合学/背包的动态 T-SQL 方法

    我想我的问题与背包问题的一个变体有关 但我无法真正想出解决方案 假设您在一家五金店 需要购买 21 个螺丝 他们只提供袋装产品 袋子 X 16 个螺丝 每个螺丝 1 56 美元 总计 25 美元 Y 袋 8 个螺丝 每个螺丝 2 25 美元
  • 在 JavaScript 中增加日期

    我需要在 JavaScript 中将日期值增加一天 例如 我有一个日期值 2010 09 11 我需要将第二天的日期存储在 JavaScript 变量中 如何将日期增加一天 三种选择供您选择 1 仅使用 JavaScriptDate对象 无
  • java.lang.InknownClassChangeError:找到接口com.google.android.gms.location.SettingsClient,[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我无法在模拟器或真实设备上运行该应用程序 当我尝试从 VS Code 运行该应用程序时 它显示以下错误消息 我尝试卸载该应用程序并执行flutter clean 无需更改包我也面临这个问题
  • 很难让 browserify-shim 与 grunt-browserify (> 2.0.2) 一起使用作为转换

    在2 0 2版本中grunt browserify browserify shim已从模块本身中删除并转换为用作transform 而不是直接的option on a grunt browserify task The old使用垫片的版本
  • 运行 docker 容器的 docker 内部的气流

    我在 EC2 实例上运行气流 并且正在安排一些启动 Docker 容器的任务 我怎么做 我需要在气流容器上安装 docker 吗 以及下一步是什么 我有一个用于启动容器的 yaml 文件 它源自 puckel airflow Docker
  • iOS 12 中新 iOS 13 系统颜色的回退行为

    我目前正在采用深色模式 我认为使用新的系统颜色 例如systemBackground and label也在界面生成器中正常工作在 iOS 12 中运行该应用程序时 我本以为会出现编译器错误 但该应用程序看起来就像在 iOS 13 轻量模式
  • 从同一向量中推回一个元素是否安全?

    vector
  • 解析类似电子邮件的标头(类似于 RFC822)

    问题 问题 有一个机器人信息数据库我想解析一下 据说是类似于 RFC822 消息 在我重新发明轮子并编写自己的解析器之前 我想我应该看看是否还有其他可用的东西 我偶然发现imap rfc822 parse headers 这似乎正是我想要的