php - PHP:将名称部分从名称解析器(theiconic)映射到 vCard 属性
问题描述
我面临将一串名称数据$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
代表公司名称还是个人。
因此,我想知道其他人是否有同样的任务,如果这会朝着正确的方向发展,可以看看它。
很多谢谢
解决方案
我已经为自己找到了一个满意的解决方案:https ://github.com/theiconic/name-parser/pull/40 希望其他人可以使用它。
推荐阅读
- android - 我的 Admob 广告未在我的应用中显示,出现错误代码 3“无广告配置”如何解决,我的测试广告也正常工作
- javascript - 在 vue 可拖动的每次更改后获取数组 ID
- html - 为什么“价格和时间”表头没有完全覆盖该部门
- java - 序列化和反序列化属性不一致
- flutter - Flutter:当路由被压入堆栈时如何自动触发函数?
- python - 如何从 es.search 结果中的列表中获取搜索到的字符串?
- python - 从 s3 Bucket 获取数据
- php - 如何使用 HTML 动态获取 MailChimp 或 Mandrill 取消订阅 URL?
- c - C 语言中的“diff”Linux 实用程序实现
- python - 您可以将未解析的参数传递给python中的类函数吗?