【问题标题】:Convert vCard Bulk Contact File to Single .vcf files将 vCard 批量联系人文件转换为单个 .vcf 文件
【发布时间】:2009-09-07 09:52:44
【问题描述】:

我最近遇到了一个问题...我想将我的联系人从我的 LG U990 Viewty 转移到我的 iPhone 3GS

我将联系人从我的 LG 导出到一个 vCard 文件,其中包含所有地址都合为一个

BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8:A;
TEL;CELL;CHARSET=UTF-8:*121#
REV:20120720T081000Z
END:VCARD

现在所有联系人都重复上述格式...在该单个文件中...

我想将此单个文件转换为原始 vcf 文件...不知道它们也无法导入 iPhone :(

实际解决方案:我需要将原始批量 vCard 文件上传到新 gmail 的帐户联系人并将我的联系人同步到 iTunes 中的该列表......最后我做到了

但是,我将 PHP 中的这段代码作为付费软件提供,人们购买它来破译联系人...这是下面的代码...免费

contacts.txt 是那个文件...在文本编辑器中打开该 vCard 文件并复制内容并制作此 contacts.txt 文件

$filename = "contacts.txt";
$fd = fopen ($filename, "r");
$contents = fread ($fd,filesize ($filename));

fclose ($fd);
$delimiter = "BEGIN:VCARD";
$splitcontents = explode($delimiter, $contents);
$counter = "";
$write = "";
$finalName = "";

foreach ( $splitcontents as $color )
{
    $counter = $counter+1;
    $first = strpos($color, "UTF-8:");
    $second = strpos($color, "TEL;");
    $name = substr($color, $first+6, $second-$first-7);

    $wordChunks = explode(";", $name);

    for($i = 0; $i < count($wordChunks); $i++)
    {
        if(trim($wordChunks[0])!="" || trim($wordChunks[1])!="" )
            $finalName .= " ".$wordChunks[$i];
    }

    $finalName= trim($finalName);   
    $fileName = $finalName.".vcf";

    $ourFileHandle = fopen($fileName, 'w') or die("can't open file");
    $stringData = "BEGIN:VCARD ".$color;
    fwrite($ourFileHandle, $stringData);
    fclose($ourFileHandle);

    $finalName = "";

}

这将最终生成上述格式的 miltuple .vcf 文件...

我的问题:我所做的非常简单并且有漏洞 - 我们可以在 PHP 正则表达式中进行上述迭代和过滤吗?

这将是一个很好的学习?

【问题讨论】:

  • “PHP 正则表达式”是什么意思?一种表达?没有foreach循环?没有内部for循环?我想知道您在代码中所做的所有事情。在 END:VCARD 之后拆分不是更容易吗?
  • 这样可能更容易...这就是为什么我说它有漏洞...我的意思是 preg_replace 表达式过滤器等...

标签: php vcf-vcard


【解决方案1】:
  1. 读取文件并获取上下文字符串

    NSData *String_Data = [NSData dataWithContentsOfFile:yourfilepath];
    NSString *theString = [[NSString alloc] initWithData:String_Data encoding:NSUTF8StringEncoding];
    
  2. 获取上下文中所有行的数组

    NSArray *lines = [theString componentsSeparatedByString:@"\n"];
    
  3. 在每一行中运行 for 循环:检查 BEGIN: 或 END: 的前缀

    NSString * stringForVCard=@"";
    for (int i=0; i<[lines count];i++){
    [stringForVCard stringByAppendingString:[lines objectAtIndex:i]
    if ([line hasPrefix:@"END"]) 
    [stringForVCard writeToFile:[NSString stringWithFormat:@"Make your own file path for each VCF"] atomically:TRUE encoding:NSUTF8StringEncoding error:nil ];
    //Empty the string
    stringForVCard=@"";}
    

【讨论】:

  • @foxybagga 我有同样的问题,我想将 vCard 批量联系人文件转换为单个 .vcf 文件,但我不确定如何使用给定的代码,我必须拥有博士,我不能换个方式吗?
【解决方案2】:

文件结构:

index.php

contacts.vcf

一个(文件夹)

$filename = "contacts.vcf";
$file = file($filename);
$i=1;
$content = "";
foreach ( $file as $line )
{
    if($line == 'BEGIN:VCARD'."\r\n"){
        $content = "";
    }
    $content .= $line;
    if($line == 'END:VCARD'."\r\n"){
        $fileName = $i.".vcf";
        $ourFileHandle = fopen('a/'.$fileName, 'w') or die("can't open file");
        fwrite($ourFileHandle, $content);
        fclose($ourFileHandle);
        $i++;
        echo '<br>' . $i .'
';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2011-05-21
    • 2011-12-30
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多