Guten Abend!
Ich weiss, das Thema gibt es schon wie Sand am Meer aber ich krieg's einfach nicht hin...
Hab ein Kontaktformular mit einem PHP-Skript, dass die php-mailer-class verwendet.
Habe ein Problem mit Umlauten
Bei dem Nachrichten-Feld gehen zwar alle Zeichen, beim Betreff geht aber das € - Zeichen nicht
und von Emailaddresse (siehe rechts) über Vorname+Nachname wird's dann immer schlimmer...
Hab schon 100 verschiedene Sachen ausprobiert, aber nichts hilft so dass es komplett funktioniert.
Hier das Skript:
Man kann auskommentiert schon einige Sachen erkennen, die ich versucht hab...
Viele weitere sind gelöscht...
Die Escape-Funktion macht folgendes:
Hab in der php.ini eingetragen:
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6
Das Formular hat ein accept-charset utf8, sowie die datei ein utf8 meta.
Ich weiss, das Thema gibt es schon wie Sand am Meer aber ich krieg's einfach nicht hin...
Hab ein Kontaktformular mit einem PHP-Skript, dass die php-mailer-class verwendet.
Habe ein Problem mit Umlauten
Bei dem Nachrichten-Feld gehen zwar alle Zeichen, beim Betreff geht aber das € - Zeichen nicht
und von Emailaddresse (siehe rechts) über Vorname+Nachname wird's dann immer schlimmer...
Hab schon 100 verschiedene Sachen ausprobiert, aber nichts hilft so dass es komplett funktioniert.
Hier das Skript:
PHP:
<?php
require('../phpmailer/class.phpmailer.php');
//Anti-Injection-Skript einbinden
include '../antiinjection.php';
$ngcvalidation = file_get_contents(str_replace(" ", "", "http://www.kostenloses-captcha.de/validation.php?ngid=".$_POST['ngidtransfer']."&secr=".$_POST['SecR']."&secb=".$_POST['SecB']."&secg=".$_POST['SecG'].""));
//$ngcvalidation bekommt den String "true" zugewiesen, wenn die Sicherheitseingabe korrekt war
//$ngcvalidation bekommt den String "false" zugewiesen, wenn die Sicherheitseingabe inkorrekt war
if ($ngcvalidation == "false")
{
ob_start();
echo "Falsche Eingabe beim Sicherheitscode!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
{
if (!IsSet ($_POST['vorname'],$_POST['nachname'],$_POST['email'],$_POST['betreff'],$_POST['nachricht'])
|| !is_string($_POST['vorname'])
|| !is_string($_POST['nachname'])
|| !is_string($_POST['email'])
|| !is_string($_POST['betreff'])
|| !is_string($_POST['nachricht']))
{
ob_start();
echo "Falsche Eingabe!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
if($_POST['vorname'] == "Vorname" || $_POST['vorname'] == "" )
{
ob_start();
echo "Keinen Vornamen eingegeben!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
if($_POST['nachname'] == "Nachname" || $_POST['nachname'] == "" )
{
ob_start();
echo "Keinen Nachnamen eingegeben!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
if($_POST['email'] == "Ihre Email" || $_POST['email'] == "" )
{
ob_start();
echo "Keine Emailaddresse eingegeben!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
if($_POST['betreff'] == "Betreff" || $_POST['betreff'] == "" )
{
ob_start();
echo "Keinen Betreff eingegeben!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
if($_POST['nachricht'] == "Nachricht" || $_POST['nachricht'] == "" )
{
ob_start();
echo "Keine Nachricht eingegeben!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
if($_POST['id'] != "")
{
ob_start();
header("Refresh: 0; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
{
//setlocale(LC_TIME, "de_DE.utf8");
//error_reporting(0);
// $vorname = utf8_decode($_POST['vorname']);
// $nachname = utf8_decode($_POST['nachname']);
// $email = utf8_decode($_POST['email']);
// $betreff = utf8_decode($_POST['betreff']);
// $nachricht = utf8_decode($_POST['nachricht']);
$vorname=EscapeStringForMail ($_POST['vorname'], 1);
$nachname=EscapeStringForMail ($_POST['nachname'], 1);
$email=EscapeStringForMail ($_POST['email'], 1);
$betreff=EscapeStringForMail ($_POST['betreff'], 1);
$nachricht=EscapeStringForMail ($_POST['nachricht'], 0);
// $vorname = $_POST['vorname'];
// $nachname = $_POST['nachname'];
// $email = $_POST['email'];
// $betreff = $_POST['betreff'];
// $nachricht = $_POST['nachricht'];
$empfaenger = "test@web.de";
$mail = new PHPMailer();
// $vorname = "=?utf-8?b?".base64_encode($vorname)."?=";
// $nachname = "=?utf-8?b?".base64_encode($nachname)."?=";
// $email = "=?utf-8?b?".base64_encode($email)."?=";
// $betreff = "=?utf-8?b?".base64_encode($betreff)."?=";
$mail->From = $email;
$mail->FromName = $vorname . " " . $nachname;
$mail->AddAddress($empfaenger);
$mail->Subject = $betreff;
$mail->Body = $nachricht;
$mail->WordWrap = 30;
if (!$mail->Send())
{
ob_start();
echo "Fehler beim Senden!<br>";
echo "Senden nicht erfolgreich.<br>";
echo "Sie werden in 5 Sekunden weitergeleitet.";
header("Refresh: 5; http://www.illutie.de/de/kontakt.php");
ob_end_flush();
exit;
}
else
{
header("Refresh: 0; http://www.illutie.de/de/erfolg.html");
exit;
}
}
}
?>
Man kann auskommentiert schon einige Sachen erkennen, die ich versucht hab...
Viele weitere sind gelöscht...
Die Escape-Funktion macht folgendes:
PHP:
function EscapeStringForMail ($string, $indicator=1)
{
if ($indicator!=0)
{
//UNZULAESSIGE ZEICHEN FILTERN
$string = preg_replace( "/[^a-zäüöß0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "",$string );
};
//E-MAIL-BEFEHLE FILTERN
$string = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "",$string );
//UNNOETIGE LEERZEICHEN ENTFERNEN:
$string = trim($string);
//PHP- UND HTML-CODE ENTFERNEN:
$string = strip_tags($string);
//GEFILTERTEN STRING ZURUECKGEBEN
return $string;
};
Hab in der php.ini eingetragen:
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6
Das Formular hat ein accept-charset utf8, sowie die datei ein utf8 meta.