0

ユーザーに名前、電子メール、メッセージ領域を尋ねる非常に単純な html 連絡フォームがあります。問題は、ユーザーが自分の名前をギリシャ文字で入力すると (サイトがギリシャ語であるため)、メッセージが配信されないことです。徹底的にテストしたところ、テキストエリアにギリシャ文字が含まれていても問題がないことがわかりました。問題は名前フィールドにのみ表示されます。私の連絡先フォームのコードは次のとおりです。

<form id="contact" method="post" action="mailer-backup.php" enctype="multipart/form-data" accept-charset="UTF-8">
  <input type="text" id="name" name="name" required placeholder="Όνομα">
  <input type="email" id="email" name="email" required placeholder="Email">
  <textarea id="message" name="message" required placeholder="Μήνυμα"></textarea>
  <button id="submit" type="submit">Αποστολή</button>
</form>

ご覧のとおり、これは外部の php スクリプトを呼び出します。これは、1 日中いじりましたが、肯定的な結果は得られず、次のようになります。

<?php
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = strip_tags(trim($_POST["name"]));
    $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $message = trim($_POST["message"]);
    $options="-f contact@my-website.gr";

    if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
      http_response_code(400);
      echo "All fields are required, please fill <a href=\"\">the form</a> again.";
      exit;
    }

    $recipient = "contact@my-website.gr";
    $name = '=?utf-8?b?' . base64_encode($_POST['name']) . '?=';
    $from="From: $name<$email>\r\nReturn-path: $email";
    $subject = "New contact from $name - my-website.gr";    
    $email_content = "Name: $name\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Message:\n$message\n";

    if (mail($recipient, '=?UTF-8?B?'.base64_encode($from).'?=', $subject, $email_content, $from, $options)) {
      http_response_code(200);
      echo "Thank You! Your message has been sent.";
    } else {
      http_response_code(500);
      echo "Tragic! Something went wrong and we couldn't send your message.";
    }
  } else {
    echo "There was a problem with your submission, please try again.";
  }
?>

私は一日中あらゆる種類の実験に費やしましたが、私はプログラマーではないので、うまくいきませんでした。可能な解決策で応答する親切な人々のために、覚えておいてください、私はプログラマーではありません.

4

1 に答える 1

0

実際には、mail コマンドの呼び出し引数に問題があると思います。送信者の情報を 2 番目の引数として、件名にする必要があるようです。

だから、あなたの電話を

mail($recipient, $subject, $email_content, $from, $options)

名前フィールドにUTFを使用すると、問題なく機能しました。

于 2016-08-22T17:53:29.083 に答える