Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 5 File Formats
  gp 5.1 Contact_Vcard_Build
  gp 5.2 Contact_Vcard_Parse
  gp 5.3 MP3_ID
  gp 5.4 Archive_Tar
  gp 5.5 File_Passwd
    gp 5.5.1 Grundsätzliche Funktionsweise
    gp 5.5.2 .htpasswd-Dateien
    gp 5.5.3 Unix-User verwalten
    gp 5.5.4 Samba-Passwort-Dateien
    gp 5.5.5 CVS-Passwort-Dateien
  gp 5.6 File_HtAccess
  gp 5.7 Spreadsheet_Excel_Writer
    gp 5.7.1 Arbeitsblätter
    gp 5.7.2 Tabellenfelder
    gp 5.7.3 Drucken
  gp 5.8 File_PDF


Rheinwerk Computing

5.2 Contact_Vcard_Parse  toptop


Besprochene Version: 1.30 Lizenz: PHP-Lizenz
Klassendatei(en): Contact_Vcard_Parse.php

Die Klasse Contact_Vcard_Parse stellt das Gegenstück zu Contact_Vcard_Build dar. Sie ist in der Lage, eine Visitenkartendatei einzulesen, zu analysieren und die einzelnen Werte zurückzugeben. Die Nutzung der Klasse selbst ist denkbar einfach:

require_once 'Contact_Vcard_Parse.php'; 
 
// Neues Parser-Objekt instanziieren 
$parse = new Contact_Vcard_Parse(); 
 
// Visitenkartendatei einlesen und parsen 
$cardinfo = $parse->fromFile('my_card.vcf'); 
var_dump($cardinfo);

Leider ist die Nutzung ähnlich unkomfortabel, wie sie einfach ist. Weder werden die Inhalte validiert noch stehen zurzeit Methoden zum Zugriff auf einzelne Inhalte zur Verfügung. Die gesamte Visitenkarte wird als ein ungemein großes, verschachteltes Array zurückgegeben. Aufgrund des Umfangs eines solchen Arrays muss ich hier darauf verzichten, eins komplett darzustellen, und muss mich mit einer allgemeinen Beschreibung begnügen. Für die Erläuterung werde ich mich auf diese Karte beziehen:

BEGIN:VCARD 
VERSION:3.0 
FN:Sausewind\, Peter 
N:Sausewind;Peter;;Herr; 
PROFILE:VCARD 
ADR;TYPE=HOME,PREF:;;Am Wäldchen 12;Bielefeld;;33619;Germany 
ADR;TYPE=WORK:;;Zumselweg 12;Bielefeld;;33602;Germany 
END:VCARD

Die Klasse akzeptiert Dateien mit mehreren vCards, so dass die Daten zur ersten (und meist einzigen) Karte im Array-Element 0 liegen. Innerhalb des Array-Elements finden Sie wiederum ein assoziatives Array. Hier ist für jede der Typ-Definitionen (FN, N, ADR etc.), die in der Karte enthalten ist, ein Element vorgesehen. Da einige Elemente (wie die Adresse) mehrfach vorkommen dürfen, ist auch hier wieder ein indiziertes Array enthalten. So ist also jeweils eine der beiden Adresszeilen in einem Feld abgelegt. Auch hier ist wieder ein Array (assoziativ) enthalten, das aus den Elementen param und value besteht. Die dazugehörigen Werte – Sie können es sich inzwischen sicher denken – sind wiederum Arrays. Bei param ist ein assoziatives Array enthalten, das für jeden gültigen Parameter ein Feld vorhält, das dann wiederum die einzelnen Werte der Parameter als indiziertes Array enthält.

Innerhalb des Arrays value sind die einzelnen Werte enthalten, die von einem Typ unterstützt werden, wobei diese natürlich auch wieder in Form eines Arrays abgelegt sind. Die Werte werden einfach in der Reihenfolge abgelegt, wie sie in der vCard definiert sind. Leere Werte ergeben auch ein leeres Array-Element.

Wie Sie schon merken, kann man diese Arrays nur dann sinnvoll bearbeiten, wenn man den Aufbau der Datei auch nachvollziehen kann. Hierzu sollten Sie zum einen den Anfang von Abschnitt 1.5 gelesen haben und zum anderen einen Blick in den RFC 2426 werfen. Der Entwickler hat den Aufbau des Arrays auf seiner Website so dargestellt:

$parse_result = array ( 
    [int_cardnumber] => array ( 
        [string_datatype] => array ( 
            ["param"] => array ( 
                [string_paramname] => array ( 
                    [int_repetitionnumber] => string_paramtext 
                ) 
            ) 
            ["value"] => array ( 
                [int_partnumber] => array ( 
                    [int_repetitionnumber] => string_valuetext 
                ) 
            ) 
        ) 
    ) 
)

Wenn Sie also, bezogen auf obiges Beispiel, die Anrede und den Nachnamen der Person auslesen wollten, könnte das so aussehen:

require_once 'Contact_Vcard_Parse.php'; 
$parse = new Contact_Vcard_Parse(); 
$card = $parse->fromFile('my_card.vcf'); 
 
// Nullte Karte, erstes Auftreten des Elements Name, 
// dritter Wert aus dem Array value 
$anrede=$card[0]["N"][0]["value"][3][0]; 
// Wie oben; nur der nullte Wert aus value 
$nachname=$card[0]["N"][0]["value"][0][0]);

Sollten Sie häufiger mit dieser Klasse arbeiten, wäre es sicher sinnvoll, eigene Methoden zum Auslesen der Informationen zu erstellen.

Da die enthaltenen Daten unter Umständen Sonderzeichen wie das Semikolon oder Ähnliches enthalten können, die mit einem Backslash entwertet sind, ist die statische Methode unescape() zum Entfernen der Backslashes vorgesehen.

Contact_Vcard_Parse::unescape($nachname);

Die Methode manipuliert den Wert direkt in der Variablen, so dass sie keinen Wert zurückgibt.

Da in einer vCard auch ein Bild enthalten sein kann, möchte ich noch kurz erläutern, wie Sie diese binären, Base64-kodierten Daten nutzen können. Zuerst müssen Sie die Daten mithilfe von base64_decode() entpacken. Danach können Sie sie, mit dem korrekten Header versehen, an den Browser senden.

require_once 'Contact_Vcard_Parse.php'; 
 
// Neues Parser-Objekt instanziieren 
$parse = new Contact_Vcard_Parse(); 
 
// Visitenkartendatei einlesen und parsen 
$cardinfo = $parse->fromFile("mycard.vcf"); 
 
// Sollen Anrede und Nachname oder ein Bild ausgegeben werden? 
if (false===isset ($_GET["getpic"])) 
{ 
   // Anrede auslesen und unescapen 
   $Anrede=$cardinfo[0]["N"][0]["value"][3][0]; 
   Contact_Vcard_Parse::unescape($Anrede); 
 
   // Nachnamen auslesen und unescapen 
   $Nachname=$cardinfo[0]["N"][0]["value"][0][0]; 
   Contact_Vcard_Parse::unescape($Nachname); 
 
   // Beides ausgeben und Bild einbinden 
   echo "$Anrede $Nachname <br />"; 
   echo "<img src=\"$_SERVER[PHP_SELF]?getpic=1\" />"; 
 
} 
else 
{ 
   // Bilddaten auslesen und dekodieren 
   $pic=$cardinfo[0]["PHOTO"][0]['value'][0][0]; 
   $bin=base64_decode($pic); 
   // Header senden 
   header("Content-type: image/jpeg"); 
   header("Content-Disposition: inline; filename=\"p.jpg\""); 
   echo $bin; 
   exit(); 
}

Listing 5.2 Ausgeben einer Visitenkarte mit integriertem Bild

 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern