繁体   English   中英

用PHP联系表格的西里尔字母编码不正确

[英]Incorrect encoding with Cyrillic in PHP contact form

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

我有一个联系表,但是没有正确发送任何西里尔字母。 我知道我必须输入Content-type: text/plain; charset=UTF-8 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>

Добавитова:

    $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,这不是一个好主意,因为否则每个来自Internet的垃圾邮件机器人都会使用您的表格进行邮寄,请在此处检查更多解决问题的方法。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM