PHP:将名称部分从名称解析器(主题)映射到vCard属性

问题描述 投票:0回答:1

我面临将名称数据字符串$realName转换为(正确的)vCard属性的情况。

作为解析器,theiconic name-parser似乎是最适合我的目的(该库当前正在维护,经常下载,并且已经考虑了德国特性)。

源字符串$realName可以同时包含:人员或公司的名称。因此,它的组件可以(根据我的观点)分配给以下vCard属性:

  • FN(新安排的字符串)
  • N(全名[姓];给定名称;附加名称;尊敬的前缀;尊敬的后缀)]
  • NICKNAME(很明显)
  • ORG

另一方面,名称解析器提供以下组件(或空字符串):

  • 称呼(例如,先生,夫人,博士等)
  • 名字
  • 中间名
  • 首字母(单个字母,可能后跟一个点)
  • 昵称(括号内的部分,方括号等)
  • 姓氏(即,支持诸如from,de等的前缀)
  • 后缀(Jr,Senior,3rd,PhD等)

据此-到目前为止,这是我的映射:

    /**
     * get an array of name parts vCard property as key
     * 
     * @param string $realname
     * @return array
     */
    function getNameParts(string $realName)
    {
        $parser = new Parser();
        $nameParts = $parser->parse($realName);
        $salutation = $nameParts->getSalutation();
        $firstName  = $nameParts->getFirstname();
        $lastName   = $nameParts->getLastname();
        $middleName = $nameParts->getMiddlename();
        $nickName   = $nameParts->getNickname();
        $initials   = $nameParts->getInitials();
        $suffix     = $nameParts->getSuffix();

        if (!empty($firstName)) {
            $additionalName = implode(',', [$middleName, $initials]);
            $name = implode(';', [$lastName, $firstName, $additionalName, $salutation, $suffix]);
            $fullName = implode(' ', [$salutation, $firstName, $additionalName, $lastName]).', '.$suffix;  
        } else {
            $name = '';
            $fullName = $realName;
            $company = $realName;
        }

        return [
            'N'        => $name,
            'FN'       => $fullName,
            'NICKNAME' => $nickName,
            'ORG'      => $company,
        ]
    }

我对美国/英国的名称组成规则,它们的正确分配和顺序(例如FN)不太熟悉。我也没有更好的主意,如何确定$realName是代表公司名称还是个人。

因此,我想知道别人是否有相同的任务,如果可以朝正确的方向前进,可以看看。

许多人

php parsing vcard
1个回答
0
投票

我为自己找到了令人满意的解决方案:https://github.com/theiconic/name-parser/pull/40我希望其他人可以使用它。

© www.soinside.com 2019 - 2024. All rights reserved.