0

我是使用 PHP 和表单的新手,所以如果有人愿意提供帮助,我将非常感激。

我有一个联系表格,但它没有正确发送任何西里尔字符。我知道我必须把Content-type: text/plain; charset=UTF-8它放在代码中的某个地方,但我不知道确切地放在哪里。表单元素设置为 post in UTF-8,但它似乎无法与 PHP 文件一起正常工作。

error_reporting(E_ALL ^ E_NOTICE);

$my_email = "myemailaddress@mail.com";
$from_email = "";
$continue = "index.php";
$errors = array();
// Remove $_COOKIE elements from $_REQUEST.
if (count($_COOKIE)) {
  foreach(array_keys($_COOKIE) as $value) {
    unset($_REQUEST[$value]);
  }
}
// Validate email field.
if (isset($_REQUEST['email']) && !empty($_REQUEST['email']) && !empty($_REQUEST['family']) && !empty($_REQUEST['about'])) {
  $_REQUEST['email'] = trim($_REQUEST['email']);
  if (substr_count($_REQUEST['email'], "@") != 1 || stristr($_REQUEST['email'], " ")) {
    $errors[] = "Email address is invalid";
  } else {
    $exploded_email = explode("@", $_REQUEST['email']);
    if (empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])) {
      $errors[] = "Email address is invalid";
    } else {
      if (substr_count($exploded_email[1], ".") == 0) {
        $errors[] = "Email address is invalid";
      } else {
        $exploded_domain = explode(".", $exploded_email[1]);
        if (in_array("", $exploded_domain)) {
          $errors[] = "Email address is invalid";
        } else {
          foreach($exploded_domain as $value) {
            if (strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i', $value)) {
              $errors[] = "Email address is invalid";
              break;
            }
          }
        }
      }
    }
  }
}
// Check referrer is from same site.
if (!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']))) {
  $errors[] = "You must enable referrer logging to use the form";
}
// Check for a blank form.
function recursive_array_check_blank($element_value) {
  global $set;
  if (!is_array($element_value)) {
    if (!empty($element_value)) {
      $set = 1;
    }
  } else {
    foreach($element_value as $value) {
      if ($set) {
        break;
      }
      recursive_array_check_blank($value);
    }
  }
}
recursive_array_check_blank($_REQUEST);
if (!$set) {
  $errors[] = "You cannot send a blank form";
}
unset($set);
// Display any errors and exit if errors exist.
if (count($errors)) {
  foreach($errors as $value) {
    print "$value<br>";
  }
  exit;
}
if (!defined("PHP_EOL")) {
  define("PHP_EOL", strtoupper(substr(PHP_OS, 0, 3) == "WIN") ? "\r\n" : "\n");
}
// Build message.
function build_message($request_input) {
  if (!isset($message_output)) {
    $message_output = "";
  }
  if (!is_array($request_input)) {
    $message_output = $request_input;
  } else {
    foreach($request_input as $key = > $value) {
      if (!empty($value)) {
        if (!is_numeric($key)) {
          $message_output. = str_replace("_", " ", ucfirst($key)).
          ": ".build_message($value).PHP_EOL.PHP_EOL;
        } else {
          $message_output. = build_message($value).
          ", ";
        }
      }
    }
  }
  return rtrim($message_output, ", ");
}
$message = build_message($_REQUEST);
$message = $message.PHP_EOL.PHP_EOL.
"-- ".PHP_EOL.
"Thank you for using the contact form.";
$message = stripslashes($message);
$subject = $_REQUEST['about'];
$subject = stripslashes($subject);
if ($from_email) {
  $headers = "From: ".$from_email;
  $headers. = PHP_EOL;
  $headers. = "Reply-To: ".$_REQUEST['email'];
} else {
  $from_name = "";
  if (isset($_REQUEST['name']) && !empty($_REQUEST['name'])) {
    $from_name = stripslashes($_REQUEST['name']);
  }
  $headers = "From: {$from_name} <{$_REQUEST['email']}>";
}
mail($my_email, $subject, $message, $headers); ?> 



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
  <head>
    <title>Your mail has been sent!</title>
    <meta http-equiv="Content-Type" content="text/html; charset = utf - 8 ">
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
  </head>
  <body>
    <div>
      <center>
        <b>Thank you <?php if(isset($_REQUEST['name'])){print stripslashes($_REQUEST['name']);} ?></b>
        <br>Your mail has been sent!
        <p><a href="<?php print $continue;?>">Click here to continue</a></p>
      </center>
    </div>
  </body>
</html>
4

1 回答 1

0

Добави това:

    $headers = "From: " . $from_email;
    $headers .= PHP_EOL;
    $headers .= "Reply-To: " . $_REQUEST['email'];
    //новия код (new code)
    $headers .= "MIME-Version: 1.0"."\r\n" ."Content-type: text/plain; charset='utf-8'". "\r\n";

Няма да е лошо да сложиш и някаква форма на верификация (картинка с код примерно, който трябва да се въведе, т.нар. CAPTCHA code) преди пращане от юзера, иначе всеки спам бот ще ти ползва формата за пращане на мейли, порови тук има доста начини за справяне с проблема。

翻译:(在发送电子邮件之前放置某种验证码,其中包含代码的图像,所谓的 CAPTCHA 是不错的主意,因为否则来自互联网的每个垃圾邮件机器人都会使用您的表单进行邮寄,请在此处查看更多解决问题的方法。)

于 2013-04-11T11:05:23.217 回答