Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP邮件脚本换行符和特殊字符_Php - Fatal编程技术网

PHP邮件脚本换行符和特殊字符

PHP邮件脚本换行符和特殊字符,php,Php,我正在使用下面的邮件脚本,但问题是它转换了一些字符。 典型的邮件如下所示: Neue Nachricht von Mustermann, Max (bla@blub.de): Hallo Herr Platzhalter,
wie soeben besprochen, würden wir gern ein "Schild" mit der Aufschrift "Aufschrift" bei

我正在使用下面的邮件脚本,但问题是它转换了一些字符。 典型的邮件如下所示:

Neue Nachricht von Mustermann, Max (bla@blub.de):
Hallo Herr Platzhalter,
wie soeben besprochen, würden wir gern ein
"Schild" mit der Aufschrift  "Aufschrift" bei Ihnen
bestellen.
Bitte teilen Sie uns doch mit, wie wir da
verfahren müssen ... 
Ihnen einen schönen
Urlaub!
Familie Mustermann
我猜这($message=filter\u var($\u POST['message'],filter\u SANITIZE\u SPECIAL\u CHARS);)会把事情搞砸。那么我如何在不使其不安全的情况下改变它呢?还有其他的改进我应该添加到脚本中吗

<?php
    //Enter your email here
    $your_email = "mymail";
    //Enter the subject of the mail here
    $subject = "Kontakt Webseite";


    $name = $_POST['name']; 
    $email = $_POST['email']; 
    //Filter HTML characters
    $message = filter_var($_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS);

    $error = "Fehler: ";

    //Default message if unsuccessful and no other reason found
    $return_message = $error."Leider hat das Versenden der Nachricht nicht geklappt, bitte schreiben Sie mir direkt an  ".$your_email." eine E-Mail";
    if(strlen($name) > 0 && strlen($email) > 0 && strlen($message) > 0) {
        if(filter_var(filter_var($email, FILTER_VALIDATE_EMAIL), FILTER_SANITIZE_EMAIL)) {
            try {
                $body = "Neue Nachricht von ".$name." (".$email."):\n".$message;
                $header = "From: ".$email;
                mail($your_email, $subject, $body, $header);
                $return_message = "Die Nachricht wurde erfolgreich versendet, ich melde mich schnellst möglich bei Ihnen";
            }
            catch(Exception $e) { }
        } else {
            $return_message = $error."Ihre E-Mail Adresse scheint ungültig zu sein.";
        }
    } else {
        $return_message = $error."Ein oder mehrere Felder waren nicht ausgefüllt.";     
    }
    echo $return_message;
?>

它真正要做的唯一一件事就是确保接收客户端能够正确地处理它,而且无论如何也不能保证这一点:p


在这种情况下,它会将您的特殊字符转换为HTML实体(例如,
\n
->

),这会破坏您的电子邮件,而无需重新修复它们。去掉过滤器,你应该是个好人。

Slokun的观点是正确的。此外,由于电子邮件内容包含HTML实体,并且似乎使用另一种语言,因此最好在电子邮件标题中附加以下内容,以通过接收电子邮件客户端确保正确呈现:

替换:

$header = "From: ".$email;
与:


编辑:如上所述,如果在脚本中包含上述行,则无需删除清理HTML实体的行。您目前的问题是,接收电子邮件的客户端不是将电子邮件内容解释为HTML,而是纯文本。

是否确实有必要转义您将通过邮件发送的字符串?PHP将处理任何问题,这不像你在MySQL查询中使用它,我不知道。。我几乎没有使用php的经验。。该脚本包含在购买的模板中。我认为这是与安全相关的事情,不想不请自来就把事情搞砸;)谢谢你的回答,我会取下那个过滤器。。在这个站点()上,他们使用的是这样的东西:$crack=eregi((\r |\n)(to:| from:| cc:| bcc:)”,$body);我应该添加这样的东西还是过时了?好吧,以html邮件的形式发送似乎是个好主意:)你觉得我在Slokuns post下的评论怎么样?@kannix我不能说我见过这种实现形式,但是我不习惯构建大量的邮件脚本。通常情况下,我尽量不重新发明轮子,而是使用一个经过良好审查的脚本。phpMailer就是一个很好的例子:@kannix千方百计使用regex,但是如果您确实确保将“ereg”替换为“preg_match”,因为它在PHP5.3中已经被弃用了
$header = "From: " . $email . "\r\n";
$header .= "Content-type: text/html; charset=utf-8" . "\r\n";