联系表格与非英语字符不兼容

时间:2013-06-19 12:05:18

标签: php html contact-form

我有以下联系表格:

(使用PHP的HTML)

<form method="post" action="index.php">

    <p>
      <label>Namn</label>
      <input name="name" placeholder="Skriv här">

      <label>Epost adress</label>
      <input name="email" type="email" placeholder="Skriv här">

      <label>Meddelande</label>
      <textarea name="message" placeholder="Skriv här"></textarea>

      <label>Hur mycket är 2+2? (Anti-spam)</label>
  <input name="human" placeholder="Skriv här">
    </p>
    <p>
      <input id="submit" name="submit" type="submit" value="Submit">
    </p>



    <?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'Från: Forall.se'; 
    $to = 'info@forall.se'; 
    $subject = 'Ny meddelande';
    $human = $_POST['human'];

    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
    if ($name != '' && $email != '') {
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
            echo '<p>Ditt meddelande har skickats!</p>';
        } else { 
            echo '<p>Någonting gick fel. Var vänlig och försök igen!</p>'; 
        } 
    } else if ($_POST['submit'] && $human != '4') {
        echo '<p>Du har gett fel svar på Anti-Spam frågan!</p>';
    }
    } else {
        echo '<p>Du behöver att fylla alla fält i formuläret!</p>';
    }
}

?>

</form>

除了ã,õ,ä,å,ö,ç等非英语字符外,其他所有内容都应该如此。如果它不是瑞典网站,这应该不是问题。

以下是我收到的最后一封电子邮件的样本:

“Jag hoppas duharförstÃ¥elsefördetataoch att duhittarnÃ¥ganannanmarknadsförare! JagÃ¥terkommernärochhom jag startar upp min firma,justnuärdedeliteosäkerthurdet blir med dettas“

如何解决此问题?

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

您需要添加标题

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'Från: Forall.se'; 
    $to = 'info@forall.se'; 
    $subject = 'Ny meddelande';
    $human = $_POST['human'];


    $headers = "MIME-Version: 1.0" . PHP_EOL;
    $headers .= "From: $from <$email> ". PHP_EOL;
    $headers .= "Content-type: text/html;charset=UTF-8 ". PHP_EOL;

   $name = str_replace( '[at]','@', $name);
   $message = str_replace( '[at]','@', $message);

    $body = "From: $name\n E-Mail: $email\n Message:\n $message";


    if ($_POST['submit']) {
    if ($name != '' && filter_var($email, FILTER_VALIDATE_EMAIL)) {
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $headers)) { 
            echo '<p>Ditt meddelande har skickats!</p>';
        } else { 
            echo '<p>Någonting gick fel. Var vänlig och försök igen!</p>'; 
        } 
    } else if ($_POST['submit'] && $human != '4') {
        echo '<p>Du har gett fel svar på Anti-Spam frågan!</p>';
    }
    } else {
        echo '<p>Du behöver att fylla alla fält i formuläret!</p>';
    }
}

?>

答案 1 :(得分:0)

PHP mail函数第4个参数不是从值发送的唯一参数。根据PHP手册:

- 这通常用于添加额外的标题(From,Cc和Bcc)。应使用CRLF(\ r \ n)分隔多个额外标题。

包含将编码消息文本的字符集。在您的情况下,正如评论所说,您必须使用 UTF-8

所以,你的代码就像这样:

$header = "From: somebody@example.com\r\nContent-Type: text/plain; charset=UTF-8";
$message = $_POST['message'];
$to = 'info@forall.se'; 
$subject = 'Ny meddelande';


mail ($to, $subject, $body, $header)