在 laravel 中,我使用 chillerlan/php-qrcode 创建 QR VCard。 当 android 扫描时,qr all 字段会被填充,而在 ios.iphone 中,名字为空,姓氏包含所有值。
chillerlan 文档参考 https://github.com/chillerlan/php-qrcode/blob/a301af5b7faa7fcd690b29f38b283616a7d93b89/docs/Appendix/URI-Content.md#L195
工作正常
Android
First name: ValueFirstname
Middle name: ValueMiddlename
Last name: ValueLastname
名字为空,姓氏包含所有值
Iphone/IOS
First name:
Last name: ValueFirstname ValueMiddlename ValueLastname
代码
firstname = $vcard_request->input('firstname');
$middlename = $vcard_request->input('middlename');
$lastname = $vcard_request->input('lastname');
$vcard = "BEGIN:VCARD\r\n";
if (!empty($middlename) && strtolower($middlename) !== 'n/a') {
$formattedName = "$firstname $middlename $lastname";
$vcard .= "N:$formattedName\r\n";
} else {
$formattedName = "$firstname $lastname";
$vcard .= "N:$formattedName\r\n";
}
$vcard .= "VERSION:4.0\r\n";
$vcard .= "END:VCARD";
composer.json
"chillerlan/php-qrcode": "^4.3",
对于 Android,它可能工作得很好,但对于 iOS,它希望这些名称根据
VCard
规范位于其特定位置。试试这个 >>
$firstname = $vcard_request->input('firstname'); $middlename = $vcard_request->input('middlename'); $lastname = $vcard_request->input('lastname');
$vcard = "BEGIN:VCARD\r\n";
$formattedName = $lastname . ';' . $firstname . ';' . $middlename . ';;';
$vcard .= "N:" . $formattedName . "\r\n";
$vcard .= "VERSION:4.0\r\n";
$vcard .= "END:VCARD";