简体   繁体   English

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

[英]Incorrect encoding with Cyrillic in PHP contact form

I'm new to using PHP and forms so if someone is willing to help, I'll be extremely grateful. 我是使用PHP和表单的新手,所以如果有人愿意提供帮助,我将非常感激。

I have a contact form, but it doesn't send any Cyrillic characters correctly. 我有一个联系表,但是没有正确发送任何西里尔字母。 I know that I have to put Content-type: text/plain; charset=UTF-8 我知道我必须输入Content-type: text/plain; charset=UTF-8 Content-type: text/plain; charset=UTF-8 somewhere in the code but I have no idea where to put it exactly. Content-type: text/plain; charset=UTF-8在代码中的某个位置,但是我不知道确切地放在哪里。 The form element is set to post in UTF-8 , but it doesn't seem to work correctly with the PHP file. 表单元素设置为以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 code) преди пращане от юзера, иначе всеки спам бот ще ти ползва формата за пращане на мейли, порови тук има доста начини за справяне с проблема. Нямадаелошодасложишинякакваформанаверификация(картинкаскодпримерно,койтотрябвадасевъведе,т.нар。CAPTCHA代码)предипращанеотюзера,иначевсекиспамботщетиползваформатазапращаненамейли,поровитук имадостаначинизасправянеспроблема。

Translated: (It is not bad idea to put some sort of verification code, an image with code inside of it, a so called CAPTCHA before sending the email, because otherwise every spam bot from Internet will use your form for mailing, check here for more ways to deal with the problem.) 翻译:(在发送电子邮件之前,先放入某种验证代码,其中包含代码的图像,即所谓的CAPTCHA,这不是一个好主意,因为否则每个来自Internet的垃圾邮件机器人都会使用您的表格进行邮寄,请在此处检查更多解决问题的方法。)

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

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