XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   PHP Kontaktformular / Sonderzeichenproblem (SRY) (http://xhtmlforum.de/showthread.php?t=57948)

kps2009 04.08.2009 18:24

PHP Kontaktformular / Sonderzeichenproblem (SRY)
 
Hallo liebe Community,

srooy erstmla das ich dafür einen neuen Thread aufmache!... Aber mir ist da ssehr wichtig und ich hoffe ihr könnt mir helfen.

Es geht um das beliebte Sonderzeichenproblem bei PHP Kontaktformularen. Habe einiges gelesen und auch einiges ausprobiert aber ich schaffe es einfach nicht eine Mail über das Formular zu versenden wo die Sonderzeichen korrekt angezeigt werden.

Hier mal mein Quellcode:

Das ist der Anfang aslso im header auch utf-8 also content type für die gesamte php datei:

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
        <head>
                <title>.....</title>
                <!-- META-->
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

.....
.........

</head>

<body>

Hier nun der PHP Code des Formulars:

Code:

<?php
// *** Deine Mailadresse (Empfänger) ***
$mail_to="test@test.de";
// *************************************

$from_name=$_POST['fromname'];
$from_mail=strtolower($_POST['frommail']);
$mail_subject=$_POST['mailsubject'];
$mail_text=$_POST['mailtext'];
$send=$_POST['s'];

if(trim($from_name)=="") $err_text.="Bitte geben Sie Ihren Namen an.<br>";
if(trim($from_mail)=="")
  $err_text.="Bitte geben Sie Ihre E-Mail Adresse an.<br>";
else
  if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$from_mail))
    $err_text.="Bitte geben Sie eine gültige E-Mail Adresse an.<br>";
if(trim($mail_subject)=="") $err_text.="Bitte geben Sie einen Betreff ein.<br>";
if(trim($mail_text)=="") $err_text.="Bitte geben Sie einen Nachrichtentext ein.<br>";

// *** Zu langen Text abschneiden ***
if(strlen($mail_text)>1000) {
  $mail_text=substr($mail_text,0,1000)."... (Text wurde gekürzt!)";
}
$from_name=str_replace(chr(34),"''",$from_name);
$mail_subject=str_replace(chr(34),"''",$mail_subject);
$from_name=stripslashes($from_name);
$from_mail=stripslashes($from_mail);
$mail_subject=stripslashes($mail_subject);
$mail_text=stripslashes($mail_text);

if(($send=="1") && (isset($err_text))) {
  echo "<big><b>Fehler beim Versuch Ihre Nachricht zu senden:</b></big><br>";
  echo "$err_text</p>";
}

if(($send!="1") || (isset($err_text)))
{
?>
                 
        <form action="kontakt.php" method="post" accept-charset="utf-8">
<table border=0 cellspacing=2 cellpadding=0 width=100%>
<tr>
  <td nowrap align=right>Ihr Name:</td>
  <td>&nbsp;</td>
<td width=100%><input type="text" name="fromname" size=50 maxlength=120 value="<?php echo $from_name; ?>"></td></tr>
<tr>
  <td nowrap align=right>Ihre E-Mail Adresse:</td>
  <td></td>
<td width=100%><input type="text" name="frommail" size=50 maxlength=120 value="<?php echo $from_mail; ?>"></td></tr>
<tr>
  <td nowrap align=right>Betreff:</td>
  <td></td>
<td width=100%><input type="text" name="mailsubject" size=50 maxlength=120 value="<?php echo $mail_subject; ?>"></td></tr>
<tr>
  <td nowrap align=right valign=top>Ihre Nachricht:<br>
    <i>(max. 1.000 Zeichen)</i></td><td></td>
<td width=100%><textarea cols="40" rows="10" name="mailtext"><?php echo $mail_text; ?></textarea></td></tr>
<tr><td></td><td></td><td>
<input type="hidden" value="1" name="s">
<input name="submit" type="submit" class="submit" value="Nachricht senden">
<input name="reset" type="reset" class="submit_delete" value="Angaben l&ouml;schen">
</td></tr>
</table>
</form>

<?php
} else {
  $header="From: $from_name <$from_mail>\n";
  $header.="Reply-To: $from_mail\n";
  $header.="X-Mailer: PHP-FormMailer\n";
  $header.="Content-Type: text/plain";
  $mail_date=gmdate("D, d M Y H:i:s")." GMT";
  $send=0;
  if(@mail($mail_to,$mail_subject,$mail_text,$header))
  {
    echo "<p><b>Ihre Nachricht wurde erfolgreich weitergeleitet.</b></p>";
    echo "<p><a href=\"kontakt.php?from_name=$from_name&from_mail=$from_mail\">Zurück zum Kontaktformular</a></p>";
  }else{
    echo "<p><b>Beim Versenden der Nachricht ist ein Fehler aufgetreten!</b></p>";
    echo "<p><a href=\"kontakt.php?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
    echo urlencode($mail_text)."\">Zurück zum Kontaktformular</a></p>";
  }
}
?>

Ich meine mir fehlt irgendwo die utf-8 Ausgabe... aber wo? :(

Wäre ecth super wenn ihr mir helfen könnten!

David 04.08.2009 19:03

Da wo sie im HTML auch steht: im Content-Type Header ;)

http://de.wikipedia.org/wiki/Header_(E-Mail)

PHP-Code:

$header.="Content-Type: text/plain; charset=utf-8"


kps2009 04.08.2009 19:15

Zitat:

Zitat von David (Beitrag 440850)
Da wo sie im HTML auch steht: im Content-Type Header ;)

http://de.wikipedia.org/wiki/Header_(E-Mail)

PHP-Code:

$header.="Content-Type: text/plain; charset=utf-8"


habe so so gemacht:

Code:

<?php
$header.="Content-Type: text/plain; charset=utf-8"; 
// *** Deine Mailadresse (Empfänger) ***
$mail_to="test@test.de";
// *************************************

$from_name=$_POST['fromname'];
$from_mail=strtolower($_POST['frommail']);
$mail_subject=$_POST['mailsubject'];
$mail_text=$_POST['mailtext'];
$send=$_POST['s'];

und es hat leider NICHT funktioniert :( oder habe ich was falsch gemacht?

kps2009 04.08.2009 19:21

ahhhh es hat funktioniert!!!!!! ich muss da surf-8 bei else reinhauen...

VIEEEEELEN DANK!!!!!!!!!!!!!!! :)

David 04.08.2009 19:27

Du musstest was wo reinhauen?

kps2009 04.08.2009 19:29

Zitat:

Zitat von David (Beitrag 440856)
Du musstest was wo reinhauen?


ich habe den header mit dem utf-8 content bei ELSE reingehauen und am anfang des php formulars:

Code:

<?php
} else {
  $header="From: $from_name <$from_mail>\n";
  $header.="Reply-To: $from_mail\n";
  $header.="X-Mailer: PHP-FormMailer\n";
  $header.="Content-Type: text/plain; charset=utf-8"; 
  $mail_date=gmdate("D, d M Y H:i:s")." GMT";
  $send=0;
  if(@mail($mail_to,$mail_subject,$mail_text,$header))
  { ................................
.....................
............

nun fuktioniert es bestens !!!

bedanke mich nochmal bei dir!!! :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:25 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023