PHP生成的电子邮件中不可预测的行为

时间:2011-08-11 00:12:20

标签: php html email

这更像是一种好奇心。每当评论发布时,我网站上的评论系统都会自动生成一封电子邮件给我。它是批准评论的链接,以及拒绝评论的链接。

$my_headers = 'MIME-Version: 1.0' . "\n"; 

$my_headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 

$my_headers .= 'From: MYSITE.com <ealert@mysite.com>' . "\n"; 

    $subject = "Comment Received";

    $messagei = "Comment from " . addslashes($_POST['commentName']) ." on ".addslashes($title)."." . "<br /><br />" .addslashes($commentCommment);

    $messagei .= "<br /><br />
        <strong>OPTIONS:</strong>

    <br /><br /><a href='http://www.MYSITE.com/edit/instaprove.php?Approve=Approve&commentid=".$lastID."'>

    <h2>http://www.MYSITE.com/edit/instaprove.php?Approve=Approve&commentid=".$lastID."</h2> (Approve Comment)</a>

    <br /><br /><br /><a href='http://www.MYSITE.com/edit/instaprove.php?Remove=Remove&commentid=".$lastID."'>

    <h2>http://www.MYSITE.com/edit/instaprove.php?Remove=Remove&commentid=".$lastID."</h2> (Delete Comment)</a>";

    mail('comments@mysite.com',$subject,$messagei,$my_headers,"-fealert@mysite.com");

99%的时间它运作得很好,但每隔一段时间,而不是正确生成批准链接,如

http://www.mysite.com/edit/instaprove.php?Approve=Approve&commentid=142631

它会在其中生成一个空格,因此我在电子邮件中收到的链接将转到

http://www.mysite.com/edit/instaprove.ph%20p?Approve=Approve&commentid=142631

奇怪,没有?

编辑:为了澄清 - 当发生这种情况时,链接会在电子邮件中正确写出(.php),但它所链接的链接会被破坏(.ph p)。

编辑8/12:它刚刚再次发生。链接文字是正确的:

http://www.mysite.com/edit/instaprove.php?Approve=Approve&commentid=142858

但链接呈现为

http://www.mysite.com/edit/%20instaprove.php?Approve=Approve&commentid=142858

所以,当它出现时,神秘空间会出现在链接的不同点上。

2 个答案:

答案 0 :(得分:6)

我遇到类似的空格问题,而且我的电子邮件来源中也出现了奇怪的“!\ n”。

这是因为线条很长。在电子邮件的内容中添加一些“\ n”可以解决问题。

答案 1 :(得分:1)

这很奇怪..你可能只想在URL本身上做一个字符串替换替换任何没有字符的空格,因为它显然有时会以某种方式抓取一个随机的空格。

str_replace(" ", "", "http://www.MYSITE.com/edit/instaprove.php?Approve=Approve&commentid=12304728")

这是一个非常奇怪的问题。

我唯一想到的另一个选择是将字符集更改为UTF-8