Mail Script / PHP - Umlaute Error

U

User0

Gast
Nach langer Zeit des probierens muss ich doch um Hilfe bitten.
Im nachfolgenden schilder ich mein Problem, danach die Datei(en).
Ich habe ein Newsletter PHP Script (Einfaches) was ich nun soweit habe das nach absenden einer Mail auch die Umlaute ö,ü,ä,ß, wunderbar im Nachrichtentext stehen, leider funktioniert dies nicht mit dem Betreff, dort erscheint nur xxxxxx, was kann ich tun?

Das Nachfolgende Erweiterungsproblem ist seid ich es so machte das wenigstens im Text der Mail die Umlaute stimmten spuckte leider die Datei zeilen.php nach absenden nur noch Vierecke raus :-( nun bin ich verwirrt und hoffe Ihr köntn mir helfen, bin sämtliche Tipps durchgegangen im WWW.

Datei: zeilen.php
PHP:
<?php 

$handle = fopen("newsletter.txt", "r");
$betreff = $_POST['betreff'];
$nachricht = utf8_decode($_POST['nachricht']);
while (!feof($handle)) {

$email = fgets($handle);
echo "<b>E-Mail:</b>    ".$email."<br>";
echo "<b>Betreff:</b>   ".$betreff."<br>";
echo "<b>Nachricht:</b> ".$nachricht."<hr>";

$headers = 
'From: Mustermann<webmaster@Mustermann.de>' . "\r\n" . 
'Reply-To: webmaster@Mustermann.de' . "\r\n" . 
'Return-Path: webmaster@Mustermann.de' . "\r\n" . 
'X-Mailer: PHP/' . phpversion();

mail($email, $betreff, $nachricht, $headers);}
fclose ($handle);
?>

Leider ist hier der Platz beschränkt, aber ich denke sehr stark das diese Datei, ausreicht da ich meine hier ist was falsch oder fehlerhaft.

Im vorraus lieben Dank und Grüße
Screamdad
 
PHP:
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";
$headers .= "From: $sender \r\n";
$subject = "Test";
$message = "Test 123";

mail($receiver, $subject, $message, $headers)

Wichtig ist die Zeile mit dem Charset! UTF-8 oder ISO-8859-1?
 
Zuletzt bearbeitet:
Nunja an der Seite ging ich ebenfalls vorbei bei meiner Suche, habe das auch gefunden, nur leider funktioniert auch mit diesem Zusatz bei mir das ganze nicht, das verwundert mich ja ebend so.
Ergänzung ()

So nun habe ich das mal etwas anders gemacht ein Problem gelößt nun muss ich nur noch herrausfinden wie ich in der Mail im Betreff statt "xxxx" auch ö ä ü Umlaute reinbekomme, daran verzweifel ich leider noch:

Aktueller Stand:
PHP:
<?php 

$handle = fopen("newsletter.txt", "r");
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
while (!feof($handle)) {

$email = fgets($handle);
echo "<b>E-Mail:</b>    ".$email."<br>";
echo "<b>Betreff:</b>   ".$betreff."<br>";
echo "<b>Nachricht:</b> ".$nachricht."<hr>";

$headers = 
'From: Mustermann<webmaster@Mustermann.de>' . "\r\n" . 
'Reply-To: webmaster@Mustermann.de' . "\r\n" . 
'Return-Path: webmaster@Mustermann.de' . "\r\n" . 
'Content-type: text/html; charset=UTF-8' . "\r\n" . 
'X-Mailer: PHP/' . phpversion();

mail($email, $betreff, $nachricht, $headers);}
fclose ($handle);
?>
Ergänzung ()

Schade, aber scheinbar hat niemand eine Idee, oder ich bin so dumm das man mir nicht helfen vermag. :-(
 
PHP:
<?php

$handle = fopen("newsletter.txt", "r");
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
while (!feof($handle)) {

$email = fgets($handle);
echo "<b>E-Mail:</b>    ".$email."<br>";
echo "<b>Betreff:</b>   ".$betreff."<br>";
echo "<b>Nachricht:</b> ".$nachricht."<hr>";

$headers = 
'Content-type: text/html; charset=UTF-8' . "\r\n" . 
'From: Mustermann<webmaster@Mustermann.de>' . "\r\n" . 
'Reply-To: webmaster@Mustermann.de' . "\r\n" . 
'Return-Path: webmaster@Mustermann.de' . "\r\n" . 
'Subject: $betreff' . "\r\n" . 
'X-Mailer: PHP/' . phpversion();

mail($email, $betreff, $nachricht, $headers);}
fclose ($handle);
?>


Probier das mal aus...hab den Contenttype mal nach oben geschoben und eine Zeile mit Subject eingefügt.
 
Zuletzt bearbeitet:
Dann fällt mir nur ein kleiner Workaround ein.

$betreff = ereg_replace("ä", "&auml;", $betreff);
$betreff = ereg_replace("Ä", "&Auml;", $betreff);
$betreff = ereg_replace("ö", "&ouml;", $betreff);
$betreff = ereg_replace("Ö", "&Ouml;", $betreff);
$betreff = ereg_replace("ü", "&uuml;", $betreff);
$betreff = ereg_replace("Ü", "&Uuml;", $betreff);

usw. für sämtliche Sonderzeichen
 
Schon probiert, dort kommen ebenfalls zwar keine xxxx aber im Betreff steht dann: &auml;
 
@Baumeister
Das kann nur IN der EMail funktionieren da es sich um einen HTML-Befehl handelt. Ist die Email eine "Plain" und keine "HTML"-Mail wird das aucht nicht mehr gehen ;)

Es handelt sich also um eine UTF-8 codierte Email

Beachte unebedingt, dass
1.) Die PHP-Datei auch richtig codiert ist!
2.) Der PHP-Header richtig angegeben ist.
3.) Wenn der Text aus einer DB kommt, sollte diese ebenfalls über UTF-8 Kodierung abgefangen werden.

Ich nehme an, du hast die Datei, in der du den Betreff ($_POST['betreff']) ausfüllst nicht als UTF-8 kodierte Datei gespeichert.

PS: Empfehlenswerter wäre "UTF-8 ohne BOM".
 
Sorry aber UTF8 ist die Seite Codiert im Head. Aber ich versuche mich damit abzufinden weil so oft kommt ö ä ü ja nicht im Betreff vor, komisch ist ja das Kumpel sagt über Hotmail liesst er die Mails und da stand alles richtig, aber bei mir im Office Outlock 2007 ist halt imemr bei Umlauten xxxx aber nur von diesem Script, andere Mails zb. T-Online geht alles hmm muss doch am Script liegen, aber ich weiss net weiter.
 
Nein, du verstehst nicht ganz. Die PHP-Befehle sollten auch SELBST in UTF-8 kodiert sein.
 

Anhänge

  • utf8.png
    utf8.png
    33,6 KB · Aufrufe: 183
Ich nutze nur Microsoft Expression Web, mehr net, rest tippe ich so. wie soll ich das nun machen.
 
Eagle-PsyX- schrieb:
@Baumeister
Das kann nur IN der EMail funktionieren da es sich um einen HTML-Befehl handelt. Ist die Email eine "Plain" und keine "HTML"-Mail wird das aucht nicht mehr gehen ;)

Es handelt sich also um eine UTF-8 codierte Email

Beachte unebedingt, dass
1.) Die PHP-Datei auch richtig codiert ist!
2.) Der PHP-Header richtig angegeben ist.
3.) Wenn der Text aus einer DB kommt, sollte diese ebenfalls über UTF-8 Kodierung abgefangen werden.

Ich nehme an, du hast die Datei, in der du den Betreff ($_POST['betreff']) ausfüllst nicht als UTF-8 kodierte Datei gespeichert.

PS: Empfehlenswerter wäre "UTF-8 ohne BOM".



2 Dinge!

a) Du hast ein R vergessen...ich heiße Braumeister :p

b) häää? Du kannst doch im PHP Script bevor die Mail versendet wird mit dem Inhalt der Variable alles machen was du willst. In dem Fall ersetze ich halt Zeichen aus der Variable $betreff. Das geht auf jedenfall! Keine Ahnung was du da gelesen hast.
 
@braumeiseter
Natürlich geht das. Doch das ist Unsinn HTML-Sonderzeichen als "reinen" Text abzuschicken.
Denn der Betreff(!!) einer E-Mail wird nicht als HTML anerkannt sondern als Plain-Text(!).

Deshalb wird im Betreff "&auml;" stehen und nie "ä", also auf diese Weise.
Im Text der EMail macht es sinn, so fern es sich um eine HTML-Email handelt.

@ScreamDad
Öffne mal die PHP-Datei mit dem Editor (Start => Programme => Zubehör => Editor).
Anschließend speicherst du sie ab, mit der "Codierung" UTF-8.
Vorischt, Sonderzeichen könnten dabei verloren gehn, da es nicht 'konvertiert' wird sondern nur abgespeichert, glaube ich. Also SOnderzeichen wie € ä ü ö ß...
 
Du ersetzt aber durch die HTML-Codes &auml; &uuml; etc.

Und außerdem könntest du das, wenn du schon ersetzt, in ein Array schreiben, welches dann von einer Schleife durchlaufen wird, ist flexibler und weniger Schreibarbeit.

/edit: sorry zu lahm ;)
 
Zuletzt bearbeitet:
Nun versteh ich nur noch Bahnhof, also eines weiss ich die Datei in nem Editor öffnen tat ich bereits neben dem Expression Web, aber auch das tat keine Wirkung darauf, aber ansonsten pfeifft es gerade nur durch mein kopf mit Fragezeichen.

Edit: Jetzt erschein im formular.php dieses Zeichen beim aufrufen aufen Server:  und er scheint nun garnicht mehr zu senden, argg ich gebs auf bin zu doof.
 
Zuletzt bearbeitet von einem Moderator:
@Backslash
Ja, aber es geht hier doch um den Betreff und der wird NICHT als HTML interpretiert! Wie oft denn noch.

@ScreamDad
Ja das könnte passieren, da das Dokument als UTF-8 gespeichert wurde, aber nicht UTF-8 konvertiert wurde (also nicht umgewandelt). Es ist aufwendig eine Kodierung umzustellen, da alle Datei / Datenbankeinträge / Datenbank Abrufungen und das Formular (inkl. HTML) auch umgewandelt werden müssen.
Weiß das aus eigener Erfahrung. Für die kyrlischen Schriftarten war das nötig. ( hier ). Aber danach funktioniert sogar die RSS-Feads damit ( RSS ).

Edit: Bleiben wir doch bei UTF-8:
Also ich wüde dir empfehlen Notepad++ zu installieren (3-6 MB oda so { Notepad++ bei CB } ). Dort kannst du dann oben auf "Format" -> "Konvertieren zu UTF-8 ohne BOM" klicken.

Vergiss nicht im HTML-Header zu schreiben:
HTML:
<meta http-equiv="content-Type" content="text/html; charset=UTF-8; ?>" />

und im PHP-Header

PHP:
header("Content-type: text/html;charset=UTF-8");

und im Falle von XHTML ganz zu beginn:
HTML:
<?xml version="1.0" encoding="UTF-8" ?>
 
Zuletzt bearbeitet:
Der Betreff in einer Mail wird weder in latin1, noch utf-8 kodiert, siehe rfc2047.

füge folgenden Code vor dem aufruf von mail() in deinem Code ein:

PHP:
$betreff = '=?UTF-8?B?'.base64_encode($betreff).'?=';
 
Thema hat sich erledigt:

1. Riesen Dank an "luky37" (Mein Held)
2. Danke an "Backslash, Eagle-PsyX-, braumeister"
3. Alle Probleme mit diesem Code erledigt:

<?php
$handle = fopen("newsletter.txt", "r");
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
while (!feof($handle)) {

$email = fgets($handle);
echo "<b>E-Mail:</b> ".$email."<br>";
echo "<b>Betreff:</b> ".$betreff."<br>";
echo "<b>Nachricht:</b> ".$nachricht."<hr>";

$headers =
'From: Mustersite<webmaster@Mustersite.de>' . "\r\n" .
'Reply-To: webmaster@Mustersite.de' . "\r\n" .
'Return-Path: webmaster@Mustersite.de' . "\r\n" .
'Content-type: text/html; charset=UTF-8' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($email, '=?UTF-8?B?'.base64_encode($betreff).'?=', $nachricht, $headers);}
fclose ($handle);
?>

4. Zusätzliche Inspiration gab: http://bitprison.net/php_mail_utf-8_subject_and_message
 
Zuletzt bearbeitet von einem Moderator: (Thema Abgeschlossen)
Zurück
Oben