Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>PHP Formular mit Umlaut Problemen

PHP Formular mit Umlaut Problemen

Darrensmojo
Darrensmojo21.04.1017:49
Hallo,

ich bin echt verzweifelt. Ich habe jetzt 7 Stunden damit verbracht mein Formular irgendwie dazu zu überreden, Umlaute zu verschicken. Aber es kommen immer nur Mist an.
Ich benutze das Formular von . Es klapt alles wunderbar nur die Umlaute sehen im E-mail Programm nicht richtig aus.

ich habe schon folgende Codes probiert
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n");

$mail_header = "Content-type: text/plain; charset=UTF-8;\r\n";

$mailer->CharSet = 'UTF-8';

<input type="text" value="<?php htmlspecialchars($utf8-encoded-string); ?>">

Aber keiner funktioniert. Das einzige was funktioniert hat war die Form Anweisung so zu schreiben;
 <form method="post" name="kontaktFormular" action="<?=$_SERVER[PHP_SELF]; ?>" accept-charset="ISO-8859-1" onSubmit="return isValid()">

Aber das klappt nur in Safari

Ich bin echt verzweifelt. Hat jemand einen Rat für mich? Ich wäre sehr dankbar.

Hier mein Formular:


 <table width="564" border="0">

    <!--anfang Anrede-->
    <tr>

        <?php
  $formularAnzeigen = false;
  if (!empty($_POST["senden"]) && (
      empty($_POST["eMail"]))) {
    $formularAnzeigen = true;
    echo '<span style="color: #FF0000; font-size: x-medium;">*&nbsp;Bitte alle Pflichtfelder ausfüllen!</span>';
  } else if (!empty($_POST["senden"]) &&
             !isEmail($_POST["eMail"])) {
    $formularAnzeigen = true;  
    echo '<span style="color: #FF0000; font-size: x-medium;">*&nbsp;Die E-Mail-Adresse ist nicht korrekt!</span>';
  } else if (empty($_POST["senden"])) {
    $formularAnzeigen = true;  
  }
  if ($formularAnzeigen) {
?>
        
        <?php
        
  echo'';
  
  } else {
                      
    $eMail = '
        
Anrede:'.$_POST['anrede'].'
        
Vorname:'.$_POST['vorName'].'
        
Name:'.$_POST['nachName'].'

Strasse:'.$_POST['strasse'].'

PLZ:'.$_POST['plz'].'

Ort:'.$_POST['ort'].'

Geburtstag:'.$_POST['bday'].'
        
EMail:'.$_POST['eMail'].'';
    
    if (@mail("newsletter@email.de",
         "anmeldung",
         $eMail)) {
        
echo "<script>document.location.href='danke.html'</script>";


    } else {
      echo "E-Mail-Verkehr funktioniert zur Zeit nicht<br />";
    }
    if ($_POST['kopie']) {
      if (@mail($_POST['eMail'],
           "Hier die Kopie Ihrer Nachricht an uns",
           $eMail)) {
        echo "Sie haben eine Kopie der Nachricht zugeschickt bekommen.<br />";
      }
    }
  }
  
  function isEmail($email) {
      $mail_header = "Content-type: text/plain; charset=UTF-8;\r\n";
      $mailer->CharSet = 'UTF-8';
    $nonascii      = "\x80-\xff"; 
    $nqtext        = "[^\\$nonascii\015\012\"]";
    $qchar         = "\\[^$nonascii]";
    $protocol      = "(?:mailto:)";
    $normuser      = "[a-zA-Z0-9][a-zA-Z0-9_.-]*";
    $quotedstring  = "\"(?:$nqtext|$qchar)+\"";
    $user_part     = "(?:$normuser|$quotedstring)";
    $dom_mainpart  = "[a-zA-Z0-9][a-zA-Z0-9._-]*\.";
    $dom_subpart   = "(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*";
    $dom_tldpart   = "[a-zA-Z]{2,5}";
    $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";
    $regex         = "$protocol?$user_part\@$domain_part";
    if (preg_match("/^$regex$/",$email)) {
      return true;
    }
    return false;
  }
?>
        
        &nbsp;</td>
    </tr>
          <form method="post" accept-charset="utf-8" name="kontaktFormular" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
      <tr>
      <td height="24" class="arial_sw_normal_14">*&nbsp;E-Mail:</td>
      <td><input name="eMail" type="text" id="eMail" value="<?=$_POST['eMail']; ?>" size="40" /></td>
      <td width="78">&nbsp;</td>
    </tr>
            <tr>
          <td height="24" class="arial_sw_normal_14">&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
    <!--ende anrede-->
    <!--anfang vorName-->
      <tr>
      <td width="140" class="arial_sw_normal_14">&nbsp;&nbsp;Anrede:</td>
      <td width="318"><select name="anrede">
        <option <?=($_POST['anrede']=='Frau')?'selected':''?>>Frau</option>
        <option selected="selected" <?=($_POST['anrede']=='Herr')?'selected':''?>>Herr</option>
      </select></td>
      <td width="78">&nbsp;</td>
    </tr>
    <tr>
      <td class="arial_sw_normal_14">&nbsp;&nbsp;Vorname:</td>
      <td><input name="vorName" type="text" value="<?=$_POST['vorName']; ?>" size="40" /></td>
      <td>&nbsp;</td>
    </tr>
    <!--ende vorName-->
    <!--anfang nachName-->
    <tr>
      <td class="arial_sw_normal_14">&nbsp;&nbsp;Nachname:</td>
      <td><input name="nachName" type="text" value="<?=$_POST['nachName']; ?>" size="40" /></td>
      <td>&nbsp;</td>
    </tr>
    <!--ende nachName-->
    <!--anfang eMail-->
    <!--ende eMail-->
    <!--anfang nachricht-->
    <tr>
      <td class="arial_sw_normal_14">&nbsp;&nbsp;Stra&szlig;e, Nr.:</td>
      <td><input name="strasse" type="text" value="<?=$_POST['strasse']; ?>" size="40" /></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td class="arial_sw_normal_14">&nbsp;&nbsp;PLZ:</td>
      <td><input name="plz" type="text" value="<?=$_POST['plz']; ?>" size="40" /></td>
      <td>&nbsp;</td>
    </tr>
            <tr>
      <td class="arial_sw_normal_14">&nbsp;&nbsp;Ort:</td>
      <td><input name="ort" type="text" value="<?=$_POST['ort']; ?>" size="40" /></td>
      <td>&nbsp;</td>
            </tr>
    <tr>
      <td class="arial_sw_normal_14">&nbsp;&nbsp;Geburtstag:</td>
      <td><input name="bday" type="text" value="<?=$_POST['bday']; ?>" size="40" /></td>
      <td><input name="senden" type="submit" value="Senden" /></td>
    </tr>
        <tr>
          <td height="24" class="arial_sw_normal_14">&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td height="24" colspan="3" class="arial_sw_normal_12"><table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="2%" valign="top">*</td>
              <td width="98%" valign="top">Sie brauchen nur Ihre E-Mail Adresse angeben. Das Ausfülle weiterer Felder<br />
                überlassen wir Ihnen. Je mehr Sie ausfüllen, desto persönlicher können <br />
                wir Sie über unsere Angebote und Neuheiten informieren.</td>
              </tr>
            </table>
  &nbsp;</td>
          </tr>
    <!--ende nachricht-->
    </table>
<!--</form>-->



<!-- ............................................................... --> 
<!--                      Ende KontaktFormular                       -->
<!-- ............................................................... -->
   
   

</td>
0

Kommentare

Stranger21.04.1018:27
Wieso mischt du die Charsets? Du hast einmal $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; und dann nutzt du wieder UTF8. Ich würde einheitlich UTF8 nehmen und hast du die Datei auch als Unicode abgespeichert?

Also in meinen Formular nutze ich:

Header:

$header.= "Content-type: text/plain; charset=utf-8\r\n";
$header.= "Content-Transfer-Encoding: 8bit\r\n";

Für den Betreff:

$subject = "=?UTF-8?B?".base64_encode($subject)."?=\r\n";

Für die Nachricht:

$message = utf8_decode($message);
$message = utf8_encode($message);


So funktioniert es bei mir ohne Probleme.
0
Darrensmojo
Darrensmojo21.04.1018:46
Hallo Stranger,

vielen Dank für deine Antwort. Ich bin bei PHP noch neu und brauche es im Grunde nur für Formulare.
Ich habe die Codes bei mir hier eingefügt:

  function isEmail($email) {
$header.= "Content-type: text/plain; charset=utf-8\r\n";
$header.= "Content-Transfer-Encoding: 8bit\r\n";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=\r\n";
$message = utf8_decode($message);
$message = utf8_encode($message);
    $nonascii      = "\x80-\xff"; 
....

Aber verändert hat sich an der Situation nichts.

Muss ich evtl "message" und "subject" noch irgendwo definieren oder sind das festgesetzte Variablen?

Mein Betreff "anmeldung " wird z.B. hier erzeugt, ohne dass es "subject" benannt wird:
if (@mail("newsletter@email.de",
"anmeldung",
$eMail)) {
0
Stranger21.04.1019:00
Hui, ich habe den Code jetzt mal kopiert und genauer durchgesehen, das ist ja schrecklich! Könntest du mir bitte per PN deine Emailadresse zukommen lassen, dann schicke ich dir mein Formular per Email, dann musst du es nur einbinden.
0
Darrensmojo
Darrensmojo21.04.1019:03
Hast PM. Danke dir
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.