首页 > 解决方案 > 503 在 PHP 中传递 URL 中的句点时服务不可用

问题描述

我正在一个网站上工作,您可以在其中提供联系方式并将其提交到 PHP 页面。这些联系方式将使用原生 PHPmail()功能发送到电子邮件地址。但是,一切似乎都很好,并且可以使用以下代码:

<?php

$salutation = $_GET["salutation"];
$name = $_GET["name"];
$plan = $_GET["plan"];
$desc = $_GET["desc"];

$to = "example@email.com";
$subject = $desc;

$msg = "

<html>
<body>
    <p>Test body</p>
</body>
</html>

";

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

mail($to, $subject, $msg, $headers);

?>

当您提交表单时,URL 栏的末尾会变为:

page.php?salutation=dhr&name=Kees+van+Voorthuizen&plan=basic&desc=Test+Description

正如我所说,这可以正常工作并且没有引发错误。但是,当我在标签<input name="email" id="email" type="email">内的联系人详细信息页面中添加一个<form>并使用自己的电子邮件地址提交表单时,服务器返回 HTTP 错误 503。使用电子邮件输入字段的PHP 代码:

<?php

$salutation = $_GET["salutation"];
$name = $_GET["name"];
$email = $_GET["email"];  // <--- The only thing that has changed
$plan = $_GET["plan"];
$desc = $_GET["desc"];

$to = "example@email.com";
$subject = $desc;

$msg = "

<html>
<body>
    <p>Test body</p>
</body>
</html>

";

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

mail($to, $subject, $msg, $headers);

?>

URL 现在以:

page.php?salutation=dhr&name=Kees+van+Voorthuizen&email=my%40email.com&plan=basic&desc=Test+Description

我怀疑当我在电子邮件字段中包含句点 ('.') 时会引发错误。我尝试使用my%40emailcom而不是手动更改 URL 栏my%40email.com并且它有效。请注意,我删除了 和 之间的句emailcom

有任何想法吗?

标签: phpurl-encodinghttp-status-code-503

解决方案


推荐阅读