在托管服务器上用PHP发送邮件时,在长URL中添加空白


White space added in long URL when sending mail with PHP on hosting server

我正在用PHP发送邮件。此邮件包含一个很长的URL。如果我从我在本地主机上运行的网站发送此邮件,我会收到一个有效的URL。但是,如果我从我的网站在主机服务器上发送相同的邮件,我会收到一个损坏的URL:在URL的中间添加了一个空格(%20)。

这里是一个示例代码,我执行无论是在本地主机或在主机服务器:

$body = "<table style='width:100%; border-collapse:collapse'><thead><tr style='background:blue; color:white;'><td style='padding:0.5em; font-size:2em;'>Test</td><td style='padding:1em; text-align:right'>Test</td></tr></thead><tbody><tr><td colspan='2'> this is a test this is a test this is a test </td></tr><tr><td><br/></td></tr><tr><td colspan='2'><p>Click <a href='http://www.test.com/test.php?url_parameter_test_1=url_parameter_test_1&url_parameter_test_2=url_parameter_test_2&url_parameter_test_3=url_parameter_test_3&url_parameter_test_4=url_parameter_test_4&url_parameter_test_5=url_parameter_test_5&url_parameter_test_6=url_parameter_test_6&url_parameter_test_7=url_parameter_test_7&url_parameter_test_8=url_parameter_test_8&url_parameter_test_9=url_parameter_test_9&url_parameter_test_10=url_parameter_test_10&url_parameter_test_11=url_parameter_test_11&url_parameter_test_12=url_parameter_test_12&url_parameter_test_13=url_parameter_test_13&url_parameter_test_14=url_parameter_test_14&url_parameter_test_15=url_parameter_test_15&url_parameter_test_16=url_parameter_test_16&url_parameter_test_17=url_parameter_test_17&url_parameter_test_18=url_parameter_test_18&url_parameter_test_19=url_parameter_test_19&url_parameter_test_20=url_parameter_test_20&url_parameter_test_21=url_parameter_test_21'>here</a></p></td></tr></tbody></table>";
$boundary = uniqid('mf');
$header = "MIME-Version: 1.0'r'n";
$header .= "From: Test <test@mail.com>'r'n";
$header .= "Content-Type: multipart/alternative;boundary=".$boundary."'r'n";
$message = "'r'n'r'n--".$boundary."'r'n";
$message .= "Content-type: text/html;charset=UTF-8'r'n'r'n";
$message .= $body;
$message .= "'r'n'r'n--".$boundary."--";
mail("my_mail@mail.com", "test", $message, $header);

这是我从主机服务器执行时在邮件中收到的URL(参数15中包含%20):http://www.test.com/test.php?url_parameter_test_1=url_parameter_test_1&url_parameter_test_2=url_parameter_test_2&url_parameter_test_3=url_parameter_test_3&url_parameter_test_4=url_parameter_test_4&url_parameter_test_5=url_parameter_test_5&url_parameter_test_6=url_parameter_test_6&url_parameter_test_7=url_parameter_test_7&url_parameter_test_8=url_parameter_test_8&url_parameter_test_9=url_parameter_test_9&url_parameter_test_10=url_parameter_test_10&url_parameter_test_11 = url_parameter_test_11& url_parameter_test_12 = url_parameter_test_12& url_parameter_test_13 = url_parameter_test_13& url_parameter_test_14 = url_parameter_test_14& url % 20 _parameter_test_15 = url_parameter_test_15& url_parameter_test_16 = url_parameter_test_16& url_parameter_test_17 = url_parameter_test_17& url_parameter_test_18 = url_parameter_test_18& url_parameter_test_19 = url_parameter_test_19& url_parameter_test_20 = url_parameter_test_20& url_parameter_test_21 = url_parameter_test_21

你知道为什么URL可能会损坏,我能做什么来修复它吗?

谢谢!

我终于在另一个stackoverflow帖子中找到了解决方案:php邮件中的空格问题[/p]

$body = "<table style='width:100%; border-collapse:collapse'><thead><tr style='background:blue; color:white;'><td style='padding:0.5em; font-size:2em;'>Test</td><td style='padding:1em; text-align:right'>Test</td></tr></thead><tbody><tr><td><br/></td></tr><tr><td colspan='2'> this is a test this is a test this is a test </td></tr><tr><td><br/></td></tr><tr><td colspan='2'><p style='font-size:110%;'>Click <a href='http://www.test.com/test.php?url_parameter_test_1=url_parameter_test_1&url_parameter_test_2=url_parameter_test_2&url_parameter_test_3=url_parameter_test_3&url_parameter_test_4=url_parameter_test_4&url_parameter_test_5=url_parameter_test_5&url_parameter_test_6=url_parameter_test_6&url_parameter_test_7=url_parameter_test_7&url_parameter_test_8=url_parameter_test_8&url_parameter_test_9=url_parameter_test_9&url_parameter_test_10=url_parameter_test_10&url_parameter_test_11=url_parameter_test_11&url_parameter_test_12=url_parameter_test_12&url_parameter_test_13=url_parameter_test_13&url_parameter_test_14=url_parameter_test_14&url_parameter_test_15=url_parameter_test_15&url_parameter_test_16=url_parameter_test_16&url_parameter_test_17=url_parameter_test_17&url_parameter_test_18=url_parameter_test_18&url_parameter_test_19=url_parameter_test_19'>here</a></p></td></tr><tr><td><br/></td></tr></tbody></table>";
$boundary = uniqid('mf');
$header = "MIME-Version: 1.0'r'n";
$header .= "From: Test <test@mail.com>'r'n";
$header .= "Content-Type: multipart/alternative;boundary=".$boundary."'r'n";
$message = "'r'n'r'n--".$boundary."'r'n";
$message .= "Content-type: text/html;charset=UTF-8'r'n";
$message .= "Content-Transfer-Encoding: base64'r'n'r'n";
$message .= chunk_split(base64_encode($body));
mail("my_mail@mail.com", "test", $message, $header);