我知道有很多这样的主题,但我还没有找到令人满意的答案。
我在我的网页上的共享主机上的PHP会删除反斜杠(使用magic_quotes()
或类似的东西吗?)来自即将使用mail()
发送的表达式,因此它会更改:
<?php
$email_to = "myemail@address.com";
$email_subject = "Message from your webpage";
$name = $_POST['name'];
$email_from = $_POST['email'];
$subject = $_POST['subject'];
$message= $_POST['message'];
if($subject) {
die(); // $subject is a honeypot
}
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
die();
}
$email_message = "";
$email_message .= "Name: ".$name;
$email_message .= "Email: ".$email_from;
$email_message .= "Message: ".$message;
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= "From: " . $name . " <" . $email_from . ">" . "\r\n";
$headers .= "Reply-To: " . $email_from;
@mail($email_to, $email_subject, $email_message, $headers);
?>
进入这个:
$headers = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=utf-8' . "rn";
$headers .= 'X-Mailer: PHP/'.phpversion()."rn";
$headers .= "From: " . $name . " <" . $email_from . ">" . "rn";
$headers .= "Reply-To: " . $email_from;
此类电子邮件没有作者,没有适当的字符集,它们看起来很糟糕。我尝试了很多不同的功能,但似乎都没有。 有谁知道如何解决它?
编辑:我现在把整个代码放进去了。另外,var_export($ headers)显示了其中的最新内容string(136) "MIME-Version: 1.0rnContent-type: text/html; charset=utf-8rnX-Mailer: PHP/5.6.6rnFrom: dasda rnReply-To: asdasd@dasda.cz"
答案 0 :(得分:1)
请勿使用其网页编辑器编辑代码。
应该有一个代码编辑器。
他们使用cPanel作为控制面板吗?如果是这样寻找代码编辑器,它就在那里。
或者在本地工作站上使用FTP和编辑。这是首选方法。
我使用FileZilla for FTP和Notepad ++作为编辑器,它们可以很好地协同工作。
更新结束
你需要显示整个代码,了解你是如何得到“进入这个”的
如果那不是你正在做的事情,我想看看var_dump。
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'X-Mailer: PHP/'.phpversion()."\r\n";
$headers .= "From: " . $name . " <" . $email_from . ">" . "\r\n";
$headers .= "Reply-To: " . $_POST["email"] . "\r\n";
var_export($headers);
答案 1 :(得分:0)
您应该使用PHP的本机PHP_EOL
,因为它与平台无关(请查看this question以供参考)。尝试修改你的代码:
$headers = 'MIME-Version: 1.0' . PHP_EOL;
$headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL;
$headers .= 'X-Mailer: PHP/'.phpversion() . PHP_EOL;
$headers .= "From: " . $name . " <" . $email_from . ">" . PHP_EOL;
$headers .= "Reply-To: " . $_POST["email"] . PHP_EOL;
修改强>
正如@misunderstood指出PHP_EOL不是一个好的解决方案,因为电子邮件标题应始终以序列结束。
我想,我为此找到了workaround。而不是\r\n
尝试使用:
mb_convert_encoding('
', 'UTF-8', 'HTML-ENTITIES')