【问题标题】:PHP: Mapping name parts from name-parser (theiconic) to vCard propertiesPHP:将名称部分从名称解析器(theiconic)映射到 vCard 属性
【发布时间】:2019-12-05 13:10:18
【问题描述】:

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

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

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

  • FN(新排列的字符串)
  • N(姓[姓];名;附加名;敬称前缀;敬称后缀)
  • 昵称(很清楚)
  • 组织

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

  • 称呼(例如先生、夫人、博士等)
  • 名字
  • 中间名
  • 首字母(单个字母,可能后跟一个点)
  • 昵称(括号内的部分、方括号等)
  • 姓氏(即支持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 vcf-vcard


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多