2

我正在使用 ajax 联系表格,下载自:http: //youhack.me/2010/07/22/create-a-fancy-contact-form-with-css-3-and-jquery/

一切正常,除了 UTF,因为我在提交时不能使用西里尔符号。

php:

$name = $_POST['name']; // contain name of person
$email = $_POST['email']; // Email address of sender 
$web = $_POST['web']; // Your website URL
$body = $_POST['text']; // Your message 
$receiver = "receiver@domain.com" ; // hardcorde your email address here - This is the email address that all your feedbacks will be sent to 

if (!empty($name) & !empty($email) && !empty($body)) {
    $body = "Name: {$name}\n\nSubject: {$web}\n\nMessage: {$body}";
    $send = mail($receiver, 'Contact from domain.com', $body, "From: {$email}");
    if ($send) {
        echo 'true'; //if everything is ok,always return true , else ajax submission won't work
    }
}

它使用 jquery.validationEngine-en 进行验证。我的 html 在标题中已经有 "Content-Type" content="text/html; charset=utf-8" 。

我是 php 和 jquery 的新手,所以我会提供一些指导以在提交时使 UTF-8 工作。谢谢 :)

编辑:当我尝试在必填字段上使用西里尔字符(čšćđ)时,我收到 ajax 输入错误“请仅使用字母”。如果我在非必填字段上提交带有西里尔字符的表格,我会收到并发送电子邮件,除西里尔字母外,所有字母都显示正常,如下所示:Å¡。

编辑2:当我将收件人设置为gmail(网络邮件)时,西里尔字符显示正常,除了在一个字段中,Ajax 不允许我使用它们(来自 Reinder 答案的正则表达式)。

当我在 Outlook(本地)中设置收件人并提交表单时,没有一个西里尔字符不显示,例如:ÄĹĄ oÄa ĹĄ ÄŽŠÄ

解决感谢 Reinder 的指导和大卫今天会解决的:)

4

2 回答 2

2

查看您正在使用的插件后,我认为这与 jquery.validationEngine-en.js 中的验证正则表达式有关

当验证设置为“onlyLetter”时,它将检查使用

/^[a-zA-Z\ \']+$/

并且您的任何角色 čšćđ 都不允许在这里...

您需要为您使用的语言创建语言验证 javascript 并更改该正则表达式。例如,看看这篇文章

接下来是检查 PHP 文件和标头的编码。将其放在 PHP 代码的顶部

 header("Content-type: text/html; charset=utf-8");

检查仅在 PHP 中输​​出值时是否正确显示,如下所示:

echo $name;

如果它们在浏览器中正确显示并且只是电子邮件错误地显示了字符,那么您也需要将编码标头传递给电子邮件

例子:

$headers = "From: $name <$email>\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";
$body = "Name: {$name}\n\nSubject: {$web}\n\nMessage: {$body}";
$send = mail($receiver, 'Contact from domain.com', $body, $headers);

看看PHP.NET 网站上的邮件功能

于 2012-10-22T08:16:24.713 回答
1

而不是使用默认的 PHPmail()函数,我发现这在使用日语时会派上用场:

http://bitprison.net/php_mail_utf-8_subject_and_message

于 2012-10-22T08:16:35.307 回答