PHP联系表单中的Cyrillic编码错误

时间:2013-04-11 11:01:04

标签: php forms character-encoding contact

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

我有联系表单,但它没有正确发送任何西里尔字符。我知道我必须在代码中的某处放置Content-type: text/plain; charset=UTF-8,但我不知道在哪里准确地说出来。表单元素设置为在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>

1 个答案:

答案 0 :(得分: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代码)предипращанеотюзера,иначевсекиспамботщетиползваформатазапращаненамейли ,поровитукимадостаначинизасправянеспроблема。

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