PHP Formmailer akzeptiert keine umlaute ?!?

mad dog

mad dog

Aktives Mitglied
Thread Starter
Dabei seit
16.02.2006
Beiträge
161
Reaktionspunkte
3
Hallo,
mein Formmailer akzeptiert keine umlaute d.h. schreibe ich z.B. Björn in das Namensfeld wird dies als Fehler ausgegeben.
meine html Datei und das php Script sind aber mit Charset=utf-8 markiert.
könnt ihr mir weiterhelfen ?
Guß
mad

Hier das Script:
PHP:
<?php 
$send_email_to = "alone@home.de";
$email_subject = "Your email subject line";

function send_email($name,$email,$email_message)
{
  global $send_email_to;
  global $email_subject;

  $headers = "MIME-Version: 1.0" . "\r\n";
  $headers .= "Content-Type: Charset=utf-8\r\n";
  $headers .= "From: ".$email. "\r\n";

  $message = "<strong>Email = </strong>".$email."<br>";
  $message .= "<strong>Name = </strong>".$name."<br>";
  $message .= "<strong>Message = </strong>".$email_message."<br>";
  @mail($send_email_to, $email_subject, $message,$headers);
  return true;
}

function validate($name,$email,$message)
{
  $return_array = array();
  $return_array['success'] = '1';
  $return_array['name_msg'] = '';
  $return_array['email_msg'] = '';
  $return_array['message_msg'] = '';

 if($email == '')
  {
    $return_array['success'] = '0';
    $return_array['email_msg'] = 'email is required';
  }
  else
  {
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
    if(!preg_match($email_exp,$email)) {
      $return_array['success'] = '0';
      $return_array['email_msg'] = 'enter valid email.';  
    }
  }

  if($name == '')
  {
    $return_array['success'] = '0';
    $return_array['name_msg'] = 'name is required';
  }
  else
  {
     $string_exp = "/^[A-Za-z .'-]+$/";
    if (!preg_match($string_exp, $name)) {
      $return_array['success'] = '0';
     $return_array['name_msg'] = 'enter valid name.';
    }
  }


  if($message == '')
  {
    $return_array['success'] = '0';
    $return_array['message_msg'] = 'message is required';
  }
  else
  {
    if (strlen($message) < 2) {
      $return_array['success'] = '0';
      $return_array['message_msg'] = 'enter valid message.';
    }
  }
  return $return_array;
}

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];


$return_array = validate($name,$email,$message);
if($return_array['success'] == '1')
{
  send_email($name,$email,$message);
}

header('Content-type: text/json');
echo json_encode($return_array);
die();

?>
 
Zuletzt bearbeitet:
Bin mir jetzt nicht sicher, aber wäre htmlentities nicht eine Lösung?
 
siehe unten
 
... mir scheint diese Methode doch ein wenig over, da ich ja keine html-Zeichen wie &auml; übersetzen will
Gruß
mad
 
sooo,
Danke für nichts... aber vielleicht war meine Frage auch missverständlich.

Ich habe das Problem derweil selbst gelöst (ist auch immer am schönsten)

und zwar war Charset=utf-8 im header falsch eingetragen, sieht jetzt so aus:
PHP:
  $headers = "MIME-Version: 1.0" . "\r\n";
  $headers .= "Content-type:text/html;Charset=utf-8" . "\r\n";
  $headers .= "From: ".$email. "\r\n";

und folgende Zeichen (ÄÖÜßäöü) hinzugefügt:
PHP:
{
    $return_array['success'] = '0';
    $return_array['name_msg'] = 'name is required';
  }
  else
  {
     $string_exp = "/^[A-Za-zÄÖÜßäöü .'-]+$/";
    if (!preg_match($string_exp, $name)) {
      $return_array['success'] = '0';
     $return_array['name_msg'] = 'enter valid name.';
    }
 
Nein deine Frage war nicht missverständlich. Aber du hast die Nachfrage um 12:28 gestellt. Jetzt ist 19:00.
D.h. man muss erst mal Feierabend machen (17-18Uhr), dann erst mal was essen und dann Foren besuchen.
Du musst dich nicht für nix bedanken. Es freut mich ja, dass du es selbst hinbekommen hast.

Obwohl ich dennoch denke, dass du deiner Frage vieleicht erst mal etwas mehr Background Info hinzugefügt hättest.
Denn so ist es doch eher raten mit Rosenthal.

Aber du konntest es ja selbst "lösen" :)
 
@Labrar
ja du hast recht abends ist die chance auf kompetente Antworten am größten.
Aber du weisst sicherlich wie das ist, wenn man etwas bastelt und es hakt irgendwo ... ich hätte es bis Abends nicht ausgehalten :D

Ich habe eigentlich hier gute Erfahrungen gemacht (wenn auch meistens als Mitleser), aber es ärgert mich wenn Leute einfach mal eine Antwort 'raushauen- ob sie zielführend ist? egal! Ein ganzer Satz ist auch immer nett anstatt nur einen Link setzen.
Deshalb "danke für nichts". Formmailer+Umlaut+Problem googeln kann ich selber...

OK, die Frage war unpräzise - aber dann antworte ich doch nicht irgendwas

Gruß und schönen Feierabend
mad
 
Du hast da mein vollstes Verständnis.
Ich kann da absolut mithalten. Auch ich hole mir den einen oder anderen Rat / Tipp aus Foren.
Und auch ich hasse es wenn ich hänge und würde mir wünschen, dass ständig ein Könner am PC sitzt und nichts anderes macht als kompetente Aussagen 24 Stunden zu machen.
Andererseits wünsche ich mir auch 20 Millionen Euro oder einen Lottogewinn. :)

Nein Spaß beiseite. Du musst bei sowas einfach Geduld haben, oder eben (so blöd es sich anhört) selbst draufkommen wie du es dann ja getan hast.

Und bzgl. Links anstelle von Antworten.

Tatsächlich ist nicht jeder Link hilfreich, bzw. war man vieleicht bei der Suche schon selbst drauf.
Ich bin generell ein Typ der sich Zeit nimmt und tatsächlich versucht anhand von Codebeispielen zu helfen. Aber auch ich verwende ab und an ganz salop mal die URL Funktion. Allerdings weiß ich, dass fast jedes Thema mal irgednwo anders mit Lösung durchgeackert wurde.
Wenn also jemadn einen Link zu meiner Frage postet dann lese ich diesen auch durch. Slebst wenn mich dafür durch ein anderes Forum mit 5000 Seiten ackern muss. Hauptsache ich löse damit auch mein Problem.

Deine Frage war auch nicht unpräzise. Ich denke jeder konnte die Frage verstehen.
Allerdings war die Hintergrundbeschreibung dürftig.

Keiner weiß, ob du mit einer vordefinierten Klasse gearbeitet hast (und wenn ja, dann nur die, die die selbse PHP Formmailer Klasse verwenden wie du).

Bei einer Vordefinierten Klasse (allerdings eher unwahrscheinlich) gibt es diese Probleme eigentlich nicht, da sich der Programmierer des ganzen wirklich alle Mühe gemacht hat gerade eben so etwas zu vermeiden.
Ich zB. verwende immer noch das gute alte phpmailer script. Und diese Art von Problemen kenne ich nur auf der Seite direkt (Was man ja beheben kann), niemals aber beim Emailversand.
Ich denke einfach, dass du die Daten an deine Emailfunktion schon verhornt übergibst.
Und mit deiner Lösung, auch wenn sie zu funktionieren scheint, behebst du nur das Sympthom. Nicht aber die Ursache.

Und genau dazu gab es deinerseits zu wenig Informationen.
Woher kamen die zu versendenen Daten?
Teilweise Formular, Teilweise Datenbank?
Nur Formular, oder nur Datenbank?

Wenn teilweise oder ganz aus Datenbank, wie ist diese codiert?
Wenn teilweise oder ganz Formular, wie ist deine Seite codiert.

utf8_encode auf einen Nicht utf codierten String gibt sowas ähnliches wie arabisch zurück.
Das funktioniert nicht nur in eine Richtung.

Von dem her mein Rat für die Zukunft.

Entscheide dich bei Projektbeginn für eine Variante und zieh das dann durch.

Es geht auch ohne utf8, aber dann konsequent.
 
Zurück
Oben Unten