我需要一些帮助来理解一些对我没有意义的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);
?>
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,我将换行符填充到$message我收到的电子邮件的明显可读性中.但有时电子邮件会到达并且所有内容都应该在一个单独的行上,有时它不会.所以我想也许添加换行符的方法不是最好的,而且我做错了.
所以问题是,如果我使用的是不正确的,我应该使用什么来获得正确的换行符,如果它是正确的,为什么它总是不起作用?我们非常感谢您为此添加一些清晰度的帮助.
如果它重要或有所作为,我使用Apache 5的PHP 5(5.5.28)Linux服务器.
感谢大家的帮助,但最终我最终修改了如下,甚至添加了内容类型以获得良好的衡量标准(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));
?>
Run Code Online (Sandbox Code Playgroud)
注意:新格式不是解决方案的一部分,仅适用于我自己.解决方案是放弃平原并使用html和使用nl2br函数来强制休息,而不是优雅,不是我想要的完全但是有效.
我最好的猜测是,您有时以文本/纯文本形式发送,有时以文本/html 形式发送..(因为您没有指定任何内容,也许 mail() 或邮件服务器或客户端会做出最佳猜测?您可以调查..)
我会尝试强制它以文本/html 形式发送并使用
<br/>
Run Code Online (Sandbox Code Playgroud)
与 nl2br 一起使用,或强制其为文本/纯文本并使用 \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;
Run Code Online (Sandbox Code Playgroud)
..如果这就是你强制它以 html 形式邮寄的方式,我不确定标题