Php 动态创建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

我想知道创建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>


如果没有库,您可以这样编写:

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以友好方式插入的。任何关于如何实现这一点的建议都会破坏我的网站。