2011-08-07 4 views
0

안녕하세요, 배열에 vCard 형식을 구문 분석하고 싶습니다. 사용자가 vCard 2,1 또는 vCard 3.0을 업로드하여 구문 분석 할 수 있어야합니다. 난 그냥 PHP 배열에 vCard에서 이름과 이메일을 원한다.PHP에서 vCard 구문 분석

나는 vcardphp.sourceforge.net을 사용해 보았습니다.

<?php 

require("vcard.php"); 

$cards = parse_vcards(file('sample.txt')); 
print_r($cards); 


function parse_vcards($lines) 
{ 
    $cards = array(); 
    $card = new VCard(); 
    while ($card->parse($lines)) { 
     $property = $card->getProperty('N'); 
     if (!$property) { 
      return ""; 
     } 
     $n = $property->getComponents(); 
     $tmp = array(); 
     if ($n[3]) $tmp[] = $n[3];  // Mr. 
     if ($n[1]) $tmp[] = $n[1];  // John 
     if ($n[2]) $tmp[] = $n[2];  // Quinlan 
     if ($n[4]) $tmp[] = $n[4];  // Esq. 
     $ret = array(); 
     if ($n[0]) $ret[] = $n[0]; 
     $tmp = join(" ", $tmp); 
     if ($tmp) $ret[] = $tmp; 
     $key = join(", ", $ret); 
     $cards[$key] = $card; 
     // MDH: Create new VCard to prevent overwriting previous one (PHP5) 
     $card = new VCard(); 
    } 
    ksort($cards); 
    return $cards; 
} 
?> 

불확정 인덱스 : H 인코딩 \ WWW \ vcardphp \ vcard.php 라인 146 주의 : 정의되지 않은 인덱스 : CHARSET에서 H : \ WWW \ vcardphp \ vcard.php 라인 149

그리고 주어진 샘플 코드가 전혀 작동하지 않습니다. 정의되지 않은 색인 : 오류

+0

을 당신이 있다면 helpfull http://stackoverflow.com/questions/6971412/exporting-and-impoting-vcard –

+0

@Lawrence Cherone 더 기다리고 내 이전 대답을 받아 들일 수 어쨌든 감사합니다. – aWebDeveloper

+2

-1 스크립트 요청입니다. 이미 가지고있는 코드를 보여주고 어떤 문제가 발생했는지 설명하고, 다시 생각해보십시오. – Arjan

답변

1

오픈 소스 프로젝트 vCard PHP를 살펴 보겠습니다. 나를 위해 일 해왔다!

http://vcardphp.sourceforge.net/

+0

배열로 구문 분석 할 수 있습니다 – aWebDeveloper

+0

@Lee Armstrong : 감사합니다! 이것은 내 작은 프로젝트를 위해 잘 작동 할 것이다. –

0

그것은 http://vcardphp.sourceforge.net/ 샘플이 주어진 코드가 작동하지 않습니다 단지입니다. 당신은 작동하도록 코드를 수정할 수 있습니다 (그래서 누락 된 데이터에 실패하지 않습니다 - 첫번째 vbook.php에서 :

이 (가) 추가 참조 : if (!empty($n[*])) $tmp[] = $n[*];

function parse_vcards(&$lines) 
{ 
    $cards = array(); 
    $card = new VCard(); 
    while ($card->parse($lines)) { 
     $property = $card->getProperty('N'); 
     if (!$property) { 
      return ""; 
     } 
     $n = $property->getComponents(); 
     $tmp = array(); 
     if (!empty($n[3])) $tmp[] = $n[3];  // Mr. 
     if (!empty($n[1])) $tmp[] = $n[1];  // John 
     if (!empty($n[2])) $tmp[] = $n[2];  // Quinlan 
     if (!empty($n[4])) $tmp[] = $n[4];  // Esq. 
     $ret = array(); 
     if (!empty($n[0])) $ret[] = $n[0]; 
     $tmp = join(" ", $tmp); 
     if ($tmp) $ret[] = $tmp; 
     $key = join(", ", $ret); 
     $cards[$key] = $card; 
     // MDH: Create new VCard to prevent overwriting previous one (PHP5) 
     $card = new VCard(); 
    } 
    ksort($cards); 
    return $cards; 
} 

을 그리고 vcard.php 구문 분석 기능을 수정 예상되는 매개 변수를 가지고 있지 수용합니다.

function parse(&$lines) 
{ 
    while (list(, $line) = each($lines)) { 
     $line = rtrim($line); 
     $tmp = split_quoted_string(":", $line, 2); 
     if (count($tmp) == 2) { 
      $this->value = $tmp[1]; 
      $tmp = strtoupper($tmp[0]); 
      $tmp = split_quoted_string(";", $tmp); 
      $this->name = $tmp[0]; 
      $this->params = array(); 
      for ($i = 1; $i < count($tmp); $i++) { 
       $this->_parseParam($tmp[$i]); 
      } 
      $encoding_defined = array_key_exists('ENCODING', $this->params); 
      if ($encoding_defined && $this->params['ENCODING'][0] == 'QUOTED-PRINTABLE') { 
       $this->_decodeQuotedPrintable($lines); 
      } 
      $charset_defined = array_key_exists('CHARSET', $this->params); 
      if ($charset_defined && $this->params['CHARSET'][0] == 'UTF-8') { 
       $this->value = utf8_decode($this->value); 
      } 
      return true; 
     } 
    } 
    return false; 
}