Динамически создавать vCard

Мне было интересно, как лучше всего создать vCard. Мне не нужно хранить его на моем сервере, просто сгенерируйте его, когда пользователь захочет его скачать. Приведенный ниже код работает, но он кажется мне неуклюжим, есть ли лучший способ?

<?php
function raf_create_vcard(){
$format_name = utf8_encode($name);
$format_email = utf8_encode($email);
$format_tel = utf8_encode($tel);
$format_fax = utf8_encode($fax);
$format_www = utf8_encode($www);
$format_address = utf8_encode($address);

return 'BEGIN%3AVCARD%0D%0AVERSION%3A4.0%0D%0AN%3A%3B'.$format_name.'%3B%3B%3B%0D%0AFN%3A'.$format_name.'%0D%0AEMAIL%3A'.$format_email.'%0D%0AORG%3A'.$format_name.'%0D%0ATEL%3A'.$format_tel.'%0D%0ATEL%3Btype%3DFAX%3A'.$format_fax.'%0D%0AURL%3Btype%3Dpref%3A'.$format_www.'%0D%0AADR%3A%3B'.$format_address.'%3B%3B%3B%3B%3BSpain%0D%0AEND%3AVCARD';
}
?>

Генерация ссылки:

<a href="data:text/plain;charset=UTF-8,<?php echo raf_create_vcard(); ?>" download="contact.vcf">Download</a>

0

Решение

Без библиотеки вы могли бы написать это так:

function raf_create_vcard(){
return utf8_encode('BEGIN:VCARD
VERSION:4.0
N:;'.$name.';;;
FN:'.$name.'
EMAIL:'.$email.'
ORG:'.$name.'
TEL:'.$tel.'
TEL;type=FAX:'.$fax.'
URL;type=PREF:'.$www.'
ADR:;'.$address.';;;;;Spain
END:VCARD');
}

Но вы должны использовать библиотеку PHP для этой цели. Проверь это: https://github.com/jeroendesloovere/vcard.

use JeroenDesloovere\VCard\VCard;

$vcard = new VCard();

$vcard->addName($name);
$vcard->addCompany($name);
$vcard->addEmail($email);
$vcard->addPhoneNumber($tel);
$vcard->addPhoneNumber($fax, 'FAX');
$vcard->addURL($www, 'PREF');
$vcard->addAddress($address, null, null, null, null, null, 'Spain');

$vcardAsString = $vcard->getOutput();
1

Другие решения

Добавить ссылку в URL <a> тег для создания Vcard, как

<a href="vcard.php?id=1">Generate VCard</a>

Вы пишете код прямо в php файле
сохранить ниже код в vcard.php файл

<?php
require_once('config.php');

$sql="SELECT * FROM USER WHERE id=".$_GET['id'];
$result=mysql_fetch_row(mysql_query($sql));
// define here all the variable like $name,$image,$company_name & all other
header('Content-Type: text/x-vcard');
header('Content-Disposition: inline; filename= "'.$name.'.vcf"');

if($image!=""){
$getPhoto               = file_get_contents($image);
$b64vcard               = base64_encode($getPhoto);
$b64mline               = chunk_split($b64vcard,74,"\n");
$b64final               = preg_replace('/(.+)/', ' $1', $b64mline);
$photo                  = $b64final;
}
$vCard = "BEGIN:VCARD\r\n";
$vCard .= "VERSION:3.0\r\n";
$vCard .= "FN:" . $name . "\r\n";
$vCard .= "TITLE:" . $company_name . "\r\n";

if($email){
$vCard .= "EMAIL;TYPE=internet,pref:" . $email . "\r\n";
}
if($getPhoto){
$vCard .= "PHOTO;ENCODING=b;TYPE=JPEG:";
$vCard .= $photo . "\r\n";
}

if($mobile_no){
$vCard .= "TEL;TYPE=work,voice:" . $mobile_no . "\r\n";
}

$vCard .= "END:VCARD\r\n";
echo $vCard;

?>
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector