php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.11.2006, 13:24  
Neuer Benutzer
 
Registriert seit: 27.06.2006
Beiträge: 13
FrozenFox
Standard Problem mit CSV-Codierung

Hallo allerseits!

Ich hab ein kleines Script geschrieben, dass (von einem Formular) Daten bekommt, diese dann in eine CSV-Datei schreibt und eine Email mit der CSV-Datei als Anhang verschickt.
Soweit sogut.
Nur ergibt sich jetzt ein sehr störendes Problem:
Umlaute werden in der CSV-Datei falsch dargestellt!
Ich finde aber den Fehler einfach nicht ...

Meine Frage also: Was stimmt an meinem Code nicht?
Code:
<?php
// Administrator - Email
// Name der CSV-Datei, Empfaenger, Absender, Betreff, Mailtext, Ueberschriftszeile der CSV-Datei, Dankeschoen-Text, Error-Text
$filename = "formular_email.csv";
$receiver = "xxx@xxx.de";
$sender   = "Webmaster <webmaster@xxx.net>";
$subject  = "Anmeldedaten aktuell";
$mailText = "Anbei die aktuellsten Anmelde-Daten.";
$csvHead  = "Vorname;Zuname;Firma;PLZ;Ort;Strasse;E-Mailadresse";
$thanks   = "Herzlichen Dank f&uuml;r Ihre Anmeldung!";
$error    = "Ihre Daten konnten nicht weitergeleitet werden.
Bitte wenden Sie sich an den Webmaster.";
$nextPage = "http://xxx.de/main20.htm";

// User - Email
// Empfaenger, Absender, Befreff, Mailtext
$ureceiver = $_POST["frage_07"];

// prueft ob die CSV-Datei bereits existiert
if (!file_exists($filename))
        $answers = $csvHead."\n";
else
        $answers = "\n";
// Formulardaten in in einen String schreiben
        $answers.= $_POST["frage_01"];
for ($i = 2; $i < 8; $i++) {
        $answers.= ";".$_POST["frage_0".$i];
}
// Formulardaten in an CSV-Datei anhaengen
$fpointer = fopen($filename, "a+");
fputs($fpointer, $answers);
fclose($fpointer);

// Hier wird der Textstring der Abgrenzung generiert
$boundary = md5(uniqid(rand()));
// Das sind die Kopfzeilen der Multipart Mail
$header = "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
// zusaetzliche Header
$header .= "From: ".$sender."\n\n";
// HTML-Text
$text.= "--".$boundary."\n";
$text.= "Content-Type: text/html; charset=\"UTF-8\"\n";
$text.= "Content-Transfer-Encoding: 8bit\n\n";
$text.= "
<html>
 <head>
  <title>".$subject."</title>
 </head>
 <body>
  ".$mailText."
 </body>
</html>\n";
// CSV-Datei
$text.= "--".$boundary."\n";
$text.= "Content-Type: text/comma-separated-values name=".$filename."\n";
$text.= "Content-Transfer-Encoding: base8\n";
$text.= "Content-Disposition: attachment; filename=".$filename."\n\n";
// die Datei wird komplett in einen String eingelesen und in die Mail eingefuegt
$attachment = file_get_contents($filename);
$text.= $attachment."\n";
// abschliessnde Begrenzung der Multipart-Mail
$text.= "--".$boundary."--\n"; 

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title>Danke</title>
  <link rel='stylesheet' type='text/css' href='../style.css'>
  <style type='text/css'>
        body.main { background: #323232;  }
  </style>
 </head>
 <body>
<?

// EMail abschicken
if (mail($receiver, $subject, $text, $header)) {
?>
        echo "<h1>".$thanks."</h1>";
        // mail($ureceiver, $usubject, $umailtext, "from:$usender");
} else {
        echo "<h1>".$error."</h1>";
}
?>
  weiter
 </body>
</html>
1000 Dank im Vorraus für jede Antwort!
FrozenFox ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.11.2006, 13:36  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

was meinst du mit "Falsch" dargestellt ????

Wenn dann liegts an der Codierung. Schon mal die Postdaten ausgeben lassen ?? werden diese richtig dargestellt ??

Also ... Werden die Umlaute korrekt übergeben oder schreibt er die Umlaute nur falsch in die Datei ???

M3g4Star ist offline  
Alt 30.11.2006, 13:40  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

nun wenn die post daten richtig angezeigt werden, liegts daran:

$text.= "Content-Transfer-Encoding: base8\n";
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 30.11.2006, 13:41  
Neuer Benutzer
 
Registriert seit: 27.06.2006
Beiträge: 13
FrozenFox
Standard

Ich vermute auch, dass es an der Codierung liegt, aber wo genau ist der Fehler?

Ich habe mir die POST-Daten schon ausgeben lassen, die sind korrekt, erst in der Email, genauer gesagt in der angehängten CSV-Datei werden die Daten falsch dargestellt.

Beispiel:
Jäger wird als Jäger dargestellt,
ein Ö als ö
...
FrozenFox ist offline  
Alt 30.11.2006, 13:42  
Neuer Benutzer
 
Registriert seit: 27.06.2006
Beiträge: 13
FrozenFox
Standard

ok, und was soll ich statt base8 dann nehmen?
FrozenFox ist offline  
Alt 30.11.2006, 14:00  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

http://en.wikipedia.org/wiki/MIME#Co...nsfer-Encoding

http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

ausserdem solltest du evtl. mal hier nachschaun wenn du jetzt schon Porbleme bekommst.
http://phpmailer.sourceforge.net/
M3g4Star ist offline  
Alt 30.11.2006, 14:14  
Neuer Benutzer
 
Registriert seit: 27.06.2006
Beiträge: 13
FrozenFox
Standard

Danke für die Links aber ich bin nicht fündig geworden...

Ich habe schon (bevor ich gepostet habe) anstatt base8 8bit, 7bit, base64, quoted-printable und binary getestet.
Der einzige Unterschied war, dass man bei base64 überhaupt nichts mehr lesen konnte, sonst war es immer das gleiche...

Kann es sein, dass der Fehler doch woanders ist, oder gibt es noch einen Codiertyp?
FrozenFox ist offline  
Alt 30.11.2006, 14:42  
Gast
 
Beiträge: n/a
Standard

Welche Codierung wird am Server verwendet?

Gegebenenfalls musst du mit mb_convert_encoding()
von der Servercodierung auf '8bit' konvertieren und dann bei Content-Transfer-Encoding natuerlich auch '8bit' schreiben.

Ich hatte das Problem auch beim Emails versenden.
 
Alt 30.11.2006, 16:35  
Neuer Benutzer
 
Registriert seit: 27.06.2006
Beiträge: 13
FrozenFox
Standard

der Server verwendet LC_CTYPE=de_DE.UTF-8

Jetzt mal eine blöde Frage: Wie kann ich von der Servercodierung auf 8bit konvertieren??

-------------------------------------------------------------------------------------
edit
-------------------------------------------------------------------------------------

Sorry, bin kurz auf der Leitung gestanden

Vielen Dank!
Jetzt funktionierts!
FrozenFox ist offline  
Alt 30.11.2006, 16:55  
Gast
 
Beiträge: n/a
Standard

Paasst
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
csv codierung, codierung csv, http://www.php.de/php-tipps-2006/42948-problem-mit-csv-codierung.html, csv codierung php, php csv codierung, csv kodierung, kodierung csv, excel csv codierung, csv codieren, excel csv kodierung, php csv kodierung, csv datei codierung, codierung csv herausfinden, content-type csv, php csv encoding, codierung csv datei, text codierung bei csv, php csv head, content-transfer-encoding csv, \csv php utf8 ausgeben\

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:00 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.