解析错误:语法错误,意外$end - 有人可以解释一下


Parse error: syntax error, unexpected $end - can someone explain

我在下面的代码中遇到的错误是:

解析错误:语法错误、意外$end

网页代码:

<form style="margin-left:auto;margin-right:auto; text-align:center;" action="contactus.php" method="post">
                <label for="name">
                    Namn/F&ouml;retag
                    <input type="text" name="name" placeholder="Skriv in erat namn/f&ouml;retag h&auml;r">
                    </label><br>
                     <label for="email">
                    E-mail
                    <input type="text" name="email" placeholder="Skriv in erat namn/f&ouml;retag h&auml;r">
                    </label><br>
                    <label for="amne">
                    &Auml;mne
                    <input type="text" name="amne" placeholder="Skriv in &auml;mnet h&auml;r">
                    </label><br>
                   <label for="message">
                    Meddelande
                       <br>
                    <textarea name="message" placeholder="Skriv in meddelandet h&auml;r" rows="20" cols="70">
                       </textarea><br>
                       <input type="submit" value="Skicka">
                    </label><br>
                </form>

PHP脚本:

 <?php
    $emailSubject = $_POST['amne'];
    $webMaster = $_POST['info@example.com'];
    $nameField = $_POST['name'];
    $emailField = $_POST['email'];
    $amneField = $_POST['amne'];
    $messageField = $_POST['message'];
    $body = <<<EOD
    <br>
    <hr>
    <br>
    Namn: $name <br>
    E-mail: $email <br>
    Amne: $amne <br><br>
    Meddelande: $message <br>
    EOD;
    $headers = "Fran: $email'r'n";
    $headers .= "Content-type: text/html'r'n";
    $success = mail($webMaster, $emailSubject, $body, $headers);
    echo = "Ditt meddelande har skickats";
?>

有人可以解释为什么会发生这种情况吗?谢谢!

这里有一些问题; Heredoc和这个$headers = "Fran: $email'r'n";

我相信Fran在你的语言中看起来像是瑞典语,意思是"来自"。

但是对于 mail() - PHP,语法在任何给定的口语中都保持不变,因此它必须在标头中From:读取,所以我也在下面的代码中修复了它。

仅通过修复 heredoc 语法,邮件的标头不会注册正确的"发件人"地址,并且很可能最终进入并标记为垃圾邮件。

至于赫雷多克:

heredoc delimeter 周围不应该有任何空格或任何内容(包括制表符或任何隐藏字符,如 *unicode 等<= 见脚注)。

在这里,并完全按照所示复制它:

<?php
$emailSubject = $_POST['amne'];
$webMaster = $_POST['info@example.com'];
$nameField = $_POST['name'];
$emailField = $_POST['email'];
$amneField = $_POST['amne'];
$messageField = $_POST['message'];
$body = <<<EOD
<br>
<hr>
<br>
Namn: $name <br>
E-mail: $email <br>
Amne: $amne <br><br>
Meddelande: $message <br>
EOD;
    $headers = "From: $email'r'n";
    $headers .= "Content-type: text/html'r'n";
    $success = mail($webMaster, $emailSubject, $body, $headers);
    echo "Ditt meddelande har skickats";
?>

旁注(编辑):不应有等号:

echo = "Ditt meddelande har skickats";
     ^ remove it

我以为我也解决了这个问题。


阅读 heredoc:

  • http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

脚注:

*关于 unicode 字符:有时可以找到/意外/不知不觉地嵌入并且几乎未检测到某些 unicode 字符,因此也要小心/警惕这些字符,因为这也会导致 heredoc 失败。我以前见过这种情况。

虽然这里不是这种情况,但如果将来发生意外的类似错误并且您看不到隐藏的 unicode,您应该意识到这一点。

但是,这些代码可以被IDE/代码编辑器看到。

确保以下语句:

EOD;

前面没有任何空格。看起来您的代码缩进了,这允许在EOD前面留出空格

另外,虽然你没有问,但你也需要从这个改变:

echo = "Ditt meddelande har skickats"

对此:

echo "Ditt meddelande har skickats";

有两个错误,其中一个可能是由 Stackoverflow 的文本区域引起的:

  1. 在结束 HEREDOC 之前或之后不能缩进 ( EOD;
  2. 您在最后一行echo后有=,它应该是echo "Ditt meddelande har skickats";