Привет, я хочу разделить формат vCard на массив. Пользователь может загрузить vCard 2,1 или vCard 3.0, я должен разбираться. Я просто хочу, чтобы электронная почта с именами в vCard находилась в php-массиве.
Я пробовал 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; } ?>
Неопределенный индекс: ENCODING в H: \ www \ vcardphp \ vcard.php в строке 146 Примечание: Неопределенный индекс: CHARSET в H: \ www \ vcardphp \ vcard.php в строке 149
и приведенный пример кода не работает на всех Слишком много Undefined index: errors
Я бы взглянул на проект с открытым исходным кодом vCard PHP. Работал для меня!
Это просто, что образец 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; }
И измените функцию parcard 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; }