Php 动态创建vCard
我想知道创建vCard的最佳方法是什么。我不需要将它存储在我的服务器上,只要在用户想要下载它时生成它即可。下面的代码可以工作,但对我来说似乎很笨拙,有没有更好的方法Php 动态创建vCard,php,vcf-vcard,Php,Vcf 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_encod
<?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>
如果没有库,您可以这样编写:
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库。请查看以下内容:
如果没有库,您可以这样编写:
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库。请查看以下内容:
在中添加url链接
您可以直接在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;
?>
在中添加url链接
您可以直接在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;
?>
用于Laravel
使用软件包安装
然后在控制器中
public function downloadVcard(/* Request $request */)
{
$vcard = new VCard();
// define variables
$lastname = 'Desloovere';
$firstname = 'Jeroen';
$additional = '';
$prefix = '';
$suffix = '';
// add personal data
$vcard->addName($lastname, $firstname, $additional, $prefix, $suffix);
// add work data
$vcard->addCompany('Siesqo');
$vcard->addJobtitle('Web Developer');
$vcard->addRole('Data Protection Officer');
$vcard->addEmail('info@jeroendesloovere.be');
$vcard->addPhoneNumber(1234121212, 'PREF;WORK');
$vcard->addPhoneNumber(123456789, 'WORK');
$vcard->addAddress(null, null, 'street', 'worktown', null, 'workpostcode',
'Belgium');
$vcard->addLabel('street, worktown, workpostcode Belgium');
$vcard->addURL('http://www.jeroendesloovere.be');
//$vcard->addPhoto(__DIR__ . '/landscape.jpeg');
// return vcard as a string
//return $vcard->getOutput();
// return vcard as a download
return $vcard->download();
}
web.php中的路由
Route::get('/downloadcard', 'App\Http\Controllers\VCardController@downloadVcard');
适用于Laravel
使用软件包安装
然后在控制器中
public function downloadVcard(/* Request $request */)
{
$vcard = new VCard();
// define variables
$lastname = 'Desloovere';
$firstname = 'Jeroen';
$additional = '';
$prefix = '';
$suffix = '';
// add personal data
$vcard->addName($lastname, $firstname, $additional, $prefix, $suffix);
// add work data
$vcard->addCompany('Siesqo');
$vcard->addJobtitle('Web Developer');
$vcard->addRole('Data Protection Officer');
$vcard->addEmail('info@jeroendesloovere.be');
$vcard->addPhoneNumber(1234121212, 'PREF;WORK');
$vcard->addPhoneNumber(123456789, 'WORK');
$vcard->addAddress(null, null, 'street', 'worktown', null, 'workpostcode',
'Belgium');
$vcard->addLabel('street, worktown, workpostcode Belgium');
$vcard->addURL('http://www.jeroendesloovere.be');
//$vcard->addPhoto(__DIR__ . '/landscape.jpeg');
// return vcard as a string
//return $vcard->getOutput();
// return vcard as a download
return $vcard->download();
}
web.php中的路由
Route::get('/downloadcard', 'App\Http\Controllers\VCardController@downloadVcard');
应该考虑以下解决方案(特别是库的使用),但我想补充一点,您最好使用href
链接'data:text/vcard;base64'。base64_encode(raf_create_vcard())
,因为浏览器将根据主机操作系统解释纯文本行尾,这将生成不合规格的vcard,而这不会使用base64编码的字符串完成。这是我找到的最佳解决方案:@Mr.Web您是否有机会帮助我实现您的代码。当尝试你的代码时,我的页面会断开。IDK我做错了什么。@RodrigoZuluaga你是在用Laravel和我的代码一起使用它吗,你安装了这个软件包吗?@mr.web im使用normal.php for wordpress任何帮助都会非常有用。我只是想创建一个简单的下载按钮,但我从一个简单的wordpress变量中抓取每个人的数据。应该考虑下面的解决方案(特别是库的使用),但我想补充一点,您最好使用href
链接”数据:text/vcard;base64'。base64_encode(raf_create_vcard())
,因为浏览器将根据主机操作系统解释纯文本行尾,这将生成不合规格的vcard,而这不会使用base64编码的字符串完成。这是我找到的最佳解决方案:@Mr.Web您是否有机会帮助我实现您的代码。当尝试你的代码时,我的页面会断开。IDK我做错了什么。@RodrigoZuluaga你是在用Laravel和我的代码一起使用它吗,你安装了这个软件包吗?@mr.web im使用normal.php for wordpress任何帮助都会非常有用。我只是试着创建一个简单的下载按钮,但我从一个简单的wordpress变量中抓取每个人的数据,我试着在wordpress中实现这一点。Vcard信息是通过post ID以友好方式插入的。任何关于如何实现的建议都会破坏我的网站。我试图在wordpress中实现这一点。Vcard信息是通过post ID以友好方式插入的。任何关于如何实现这一点的建议都会破坏我的网站。