VCard erstellen
Schorse
- php
0 Mike0 Der Martin0 Schorse
Hi,
ich habe gelesen, dass eine VCard nichts anderes ist als eine Textdatei. Daraufhin habe ich diesen Codeschnipsel erstellt ...
<?
mysql_connect("***", "***", "***");
mysql_select_db("***") or die("Fehler beim Öffnen der Datenbank");
$table = "kontaktdaten";
$result = mysql_query( "select * from $table WHERE id=$id");
while($row = mysql_fetch_assoc($result))
{
print("BEGIN:VCARD");
print("<br>");
print("VERSION:2.1");
print("<br>");
print("N:");
echo "$row[nachname]";
print(";");
echo "$row[vorname]";
print("<br>");
print("FN:");
echo "$row[vorname]";
print(" ");
echo "$row[nachname]";
print("<br>");
print("ORG:");
echo "$row[orga]";
print("<br>");
print("EMAIL;TYPE=INTERNET:");
echo "$row[email]";
print("<br>");
print("TEL;TYPE=voice,work,pref:+49 ");
echo "$row[telefon]";
print("<br>");
print("END:VCARD");
}
?>
Wenn ich die Datei als .vcf speichere, ist leider der komplette Code abgespeichert und beim Import in ein Adressbuch ist die Sache ungültig. Wo muss ich ansetzen und was mache ich falsch?
Danke!
Hi,
Wenn ich die Datei als .vcf speichere, ist leider der komplette Code abgespeichert und beim Import in ein Adressbuch ist die Sache ungültig. Wo muss ich ansetzen und was mache ich falsch?
Indem du nicht den Code sondern die Aisgabe abspeicherst.
Dazu gibt es meherer Möglichkeiten. ob_start, file_get_contens, usw...
Hilft dir das?
Mike
Indem du nicht den Code sondern die Aisgabe abspeicherst.
Dazu gibt es meherer Möglichkeiten. ob_start, file_get_contens, usw...
Ehrlch gesagt nein. Hast Du ein Beispiel oder eine Möglichkeit, das halbwegs zum Script passend nachzulesen?
Danke!
Hi,
Ehrlch gesagt nein. Hast Du ein Beispiel oder eine Möglichkeit, das halbwegs zum Script passend nachzulesen?
Im Grunde das gleiche Prinzip, wie Bilder über PHP Dateien ausgeben lassen, aber...
Ein einfaches Beispiel findet sich sogar hier, einzig die HEADER-Angaben mussten angepasst werden:
http://forum.de.selfhtml.org/archiv/2006/4/t127406/
Ein komplexeres Beispiel finden sich auf:
http://www.developers-guide.net/forums/5915,php-vcard-php-parser
oder eben:
Allgemein
Mike
Hallo,
ich habe gelesen, dass eine VCard nichts anderes ist als eine Textdatei.
genau, warum schreibst du dann HTML-Tags hinein?
print("BEGIN:VCARD");
print("<br>");
print("VERSION:2.1");
print("<br>");
print("N:");
echo "$row[nachname]";
Wann hört die Unsitte mal auf, einzelne Variablen für die Ausgabe nochmal in einen String einzubetten ...?
Warum benutzt du eigentlich mal print und mal echo?
Wenn ich die Datei als .vcf speichere, ist leider der komplette Code abgespeichert und beim Import in ein Adressbuch ist die Sache ungültig. Wo muss ich ansetzen und was mache ich falsch?
Erstens: Speichere nicht den PHP-Code, sondern den Text, den er ausgibt. Das hat Mike ja auch schon gesagt.
Zweitens: Verwende Zeilenumbrüche anstatt der Zeichenfolge "<br>".
So long,
Martin
genau, warum schreibst du dann HTML-Tags hinein?
Weil ich von Vcards grundsätzlich keine Ahnung habe und bei Wikipedia eine aufgerufen habe. Da sah die so aus, wie sie in der Php-Ausgabe jetzt auch aussieht.
Wann hört die Unsitte mal auf, einzelne Variablen für die Ausgabe nochmal in einen String einzubetten ...?
Warum benutzt du eigentlich mal print und mal echo?
Ich bin noch nicht lange bei Php dabei und bringe mir das nach und nach selbst durch Versuche und Probieren bei. Fehler oder Falsches kalkuliere ich z.Z. mit ein, das wird sich mit der Zeit bessern, da bin ich mir sicher. ZZ bin ich über das froh, was funktioniert.
Erstens: Speichere nicht den PHP-Code, sondern den Text, den er ausgibt. Das hat Mike ja auch schon gesagt.
Und da habe ich auch schon geschrieben, dass ich nicht weiß, wie das geht.
Hallo,
»» genau, warum schreibst du dann HTML-Tags hinein?
Weil ich von Vcards grundsätzlich keine Ahnung habe und bei Wikipedia eine aufgerufen habe. Da sah die so aus, wie sie in der Php-Ausgabe jetzt auch aussieht.
ja, mag sein - wenn du sie in einem Browser (also im HTML-Kontext) anschaust. Der interpretiert die <br> natürlich als Zeilenumbruch.
Das gleiche gilt übrigens auch für das , das ich eben erst wahrgenommen habe. Das ist auch HTML-Codierung, die hier nichts verloren hat. Da gehört ein normales Leerzeichen hin.
Ich bin noch nicht lange bei Php dabei und bringe mir das nach und nach selbst durch Versuche und Probieren bei.
Das ist nicht die schlechteste Strategie. Aber sie sollte immer auch von kritischem Nachdenken begleitet sein: Warum ist das so? Warum geht's jetzt und vorher nicht? Was bedeuten die einzelnen Symbole, welchen Regeln folgt das ganze System?
»» Erstens: Speichere nicht den PHP-Code, sondern den Text, den er ausgibt. Das hat Mike ja auch schon gesagt.
Und da habe ich auch schon geschrieben, dass ich nicht weiß, wie das geht.
Im Moment ist mir auch noch unklar, was du genau anstellen willst. Du hast ein PHP-Script, das eine vCard erzeugt (jedenfalls wenn du die <br> durch normale Zeilenumbrüche \r\n ersetzt). In welchen Gesamtrahmen hast du das Script eingebettet? Wie hast du das Ergebnis bisher gespeichert? Beschreibe die näheren Umstände deines Tuns.
So long,
Martin
Hallo Martin,
Im Moment ist mir auch noch unklar, was du genau anstellen willst. Du hast ein PHP-Script, das eine vCard erzeugt (jedenfalls wenn du die <br> durch normale Zeilenumbrüche \r\n ersetzt).
soweit ich die Spezifikation verstehe, ist es wichtig, nicht \n\r sondern ausschließlich \n im VCARD-Bereich zu nutzen.
Wenn ich mir die Beispiele in RFC 2425 ansehe, scheint es sinnvoll zu sein, bei Nicht-ASCII-Zeichen das Content-Transfer-Encoding quoted-printable zu verwenden.
Der Wikipedia-Artikel in der derzeitigen Form erscheint mir da etwas schlampig. Zum einen wird auf Nur-ASCII hingewiesen, im zweiten Beispiel jedoch ein "ß" verwendet. Ich wundere mich nicht, dass viele Programme Schwierigkeiten mit Nicht-ASCII-Zeichen haben.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
»» Du hast ein PHP-Script, das eine vCard erzeugt (jedenfalls wenn du die <br> durch normale Zeilenumbrüche \r\n ersetzt).
soweit ich die Spezifikation verstehe, ist es wichtig, nicht \n\r sondern ausschließlich \n im VCARD-Bereich zu nutzen.
ja, den Abschnitt verstehe ich auch so, danke für die Korrektur.
Tatsache ist aber, dass das von den existierenden Programmen wohl nicht durchgängig eingehalten wird. Zumindest von Outlook und Outlook Express weiß ich, dass sie CR/LF, also \r\n verwenden. Im Thunderbird, den ich gerade als Gegenprobe hernehmen wollte, konnte ich dagegen keine Möglichkeit finden, einen Eintrag aus dem Adressbuch als separate vCard-Datei zu speichern oder einer Mailnachricht anzuhängen, potzblitz! Nur als LDIF kann ich sie exportiern, da erzeugt T-Bird aber auch CR/LF als Zeilenumbruch. Ist aber wieder eine ganz andere Baustelle.
Wenn ich mir die Beispiele in RFC 2425 ansehe, scheint es sinnvoll zu sein, bei Nicht-ASCII-Zeichen das Content-Transfer-Encoding quoted-printable zu verwenden.
Das kommt aber nur zum Tragen, wenn das Ding in irgendeinem Kontext übertragen wird, der solche Angaben unterstützt (Mail, HTTP). Hier ging es aber um das Speichern als Datei.
Der Wikipedia-Artikel in der derzeitigen Form erscheint mir da etwas schlampig. Zum einen wird auf Nur-ASCII hingewiesen, im zweiten Beispiel jedoch ein "ß" verwendet.
Ja, das ist sehr ungenau. Allerdings ist oft, wenn der Begriff "ASCII-Datei" fällt, einfach eine reine Textdatei gemeint - unabhängig von ihrer Codierung.
Ich wundere mich nicht, dass viele Programme Schwierigkeiten mit Nicht-ASCII-Zeichen haben.
Naja, andererseits heißt es in RFC 2425 wiederum, das Default-Encoding sei 8bit. Das würde auch eine ISO- oder UTF-8-Codierung ohne weiteres zulassen, nicht nur ASCII.
So long,
Martin