我需要一些帮助来理解一些对我没有意义的PHP行为,提前感谢您的帮助。
首先,使用\r\n
和\n\r
之间有区别吗?我认为逻辑上没有,但我认为必须有一个实际的原因,为什么它们单独列在PHP文档中。我目前正在使用\r\n
,但有时我会换行,有时我不会,它会让人迷惑。
其次,我知道如果我在浏览器中回显信息,我会使用nl2br()
函数,但我没有向浏览器显示信息,它正在被收集并连接成一个字符串然后通过mail()
发送,这就是出现视觉差异的地方。
以下是剧本,非常简单,没有什么可以令人难以置信的:
<?php
$browser = $_SERVER['HTTP_USER_AGENT'];
$page = $_SERVER['PHP_SELF'];
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$from_page = $_SERVER['HTTP_REFERER'];
$time = date('l, F jS Y - g:i:s A', $_SERVER['REQUEST_TIME']);
$uri = $_SERVER['SCRIPT_URI'];
$to = "***";
$subject = "Visitor Log";
$message = "IP Address : " . $ip . " ( HOST: " . $host . " )\r\n" . "Browser : " . $browser . "\r\n" . "From : " . $from_page . "\r\n" . "Page : " . $page . "\r\n" . "Time : " . $time . "\r\n" . "Script : " . $uri;
$headers = "From: ***" . "\r\n" . "Reply-To: ***" . "\r\n" . "X-Mailer: PHP/" . phpversion();
mail($to,$subject,$message,$headers);
?>
但正如您所看到的,我将换行符填充到$message
中,以便我收到的电子邮件具有明显的可读性。但有时电子邮件会到达并且所有内容都应该在一个单独的行上,有时它不会。所以我想也许添加换行符的方法不是最好的,而且我做错了。
所以问题是,我应该使用什么来获得正确的换行符,如果我使用的是不正确的,如果它是正确的,为什么它不能始终有效?我非常感谢您的帮助以增加一些清晰度。
如果重要或有所作为,我将使用PHP 5(5.5.28)Linux服务器与Apache。
感谢大家的帮助,但最终我最终将其修改如下,甚至添加了内容类型以便进行测量(TY @TOM)。
<?php
$browser = $_SERVER['HTTP_USER_AGENT'];
$page = $_SERVER['PHP_SELF'];
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$from_page = $_SERVER['HTTP_REFERER'];
$time = date('l, F jS Y - g:i:s A', $_SERVER['REQUEST_TIME']);
$uri = $_SERVER['SCRIPT_URI'];
$to = "***";
$subject = "Visitor Log";
$message = "IP Address : " . $ip . " ( HOST: " . $host . " )" . "\r\n";
$message .= "Browser : " . $browser . "\r\n";
$message .= "From : " . $from_page . "\r\n";
$message .= "Page : " . $page . "\r\n";
$message .= "Time : " . $time . "\r\n";
$message .= "Script : " . $uri;
$headers = "From: ***" . "\r\n";
$headers .= "Reply-To: ***" . "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
$headers .= "Content-Type: text/html; charset=\"utf-8\"" . "\r\n";
mail($to,$subject,nl2br($message),nl2br($headers));
?>
注意:新格式不是解决方案的一部分,仅适用于我自己。解决方案放弃了简单并使用html并使用nl2br
函数来强制休息,而不是优雅,而不是我想要的完全但是有效。
答案 0 :(得分:1)
我最好的猜测是你有时以text / ht格式发送,有时以text / html格式发送..(因为你没有指定任何东西,也许是mail()或邮件服务器或客户端最好的猜测?你可以调查..)
我会尝试强制它以text / html格式发送并使用
<br/>
使用nl2br,或强制它为text / plain并使用\ n
像...
$message = "IP Address : " . $ip . " ( HOST: " . $host . " )\r\n" . 'Content-Type: text/html; charset="utf-8"'."\r\n"."Browser : " . $browser . "\r\n" . "From : " . $from_page . "\r\n" . "Page : " . $page . "\r\n" . "Time : " . $time . "\r\n" . "Script : " . $uri;
..如果你强迫它以html的形式邮寄,我不确定标题
答案 1 :(得分:1)
问题是您没有在电子邮件标题中传递content-type
,因此电子邮件客户端可能会将其解释为plain-text
或text/html
,具体取决于供应商。最好的方法是在电子邮件标题中传递content-type
参数。
content-type:text/plain
:\n
作为换行符content-type:text/html
:</br>
作为换行符