PHP与\r\n之间的差异

PHP与\r\n之间的差异,php,syntax,Php,Syntax,简单的问题 我看到有人在不同的地方告诉我使用“\r\n”,还有人告诉我在同一个地方使用“\n”。我确信一个是对的,一个是错的。示例-设计mail()标头时: 教程#1: 教程#2(注意标题参数): 我感到困惑,但很明显这有点不同,因为对于其中一个,我的标题起作用,而对于另一个,它们有时只起作用。\r\n是Windows系统的行尾字符 \n是UNIX系统的行尾字符 这些角色是看不见的。根据我自己的经验\n通常也适用于Windows 为了平台间的可移植性,有些人更喜欢使用常量而不是这些字符 echo

简单的问题

我看到有人在不同的地方告诉我使用“\r\n”,还有人告诉我在同一个地方使用“\n”。我确信一个是对的,一个是错的。示例-设计mail()标头时:

教程#1:

教程#2(注意标题参数):


我感到困惑,但很明显这有点不同,因为对于其中一个,我的标题起作用,而对于另一个,它们有时只起作用。

\r\n是Windows系统的行尾字符

\n是UNIX系统的行尾字符

这些角色是看不见的。根据我自己的经验\n通常也适用于Windows

为了平台间的可移植性,有些人更喜欢使用常量而不是这些字符

echo 'hi' . PHP_EOL;
echo "hi\n";

$headers = "From: webmaster@example.com" . PHP_EOL 
           . "Reply-To: webmaster@example.com"; 

除了Yada的回答,这里还有一篇解释性博客:


[更新2017-05-24:修复链接]

根据(SMTP协议),邮件标题和内容中的行尾应始终为
\r\n
),但实际上这并不重要,因为大多数邮件服务器都正确处理所有三种类型的行尾(据推测,一些旧的基于UNIX的邮件实际上会阻塞
\r\n
,但不会阻塞
\n
)。

因此,这对客户端来说并不重要?例如…在为my mail()制定邮件头时。如果我运行的是linux,我应该使用\n而不是\r\n对吗?或者我也需要担心读卡器的系统是什么吗?这没关系。只需使用\n。根据我自己的经验,大多数Windows应用程序接受\n作为行尾。$headers=“From:webmaster@example.com“.PHP_EOL.”回复:webmaster@example.com";将是最安全的代码这是错误的答案。邮件标题必须用\r\n分隔。evert…问题不是关于邮件标题…这只是一个例子。我想知道\r和\n是什么。但是…在将邮件标题切换到\r\n后,它似乎工作得更好。您能指导我如何编写一个关于该主题的优秀教程吗t?此答案是正确的,但不是问题的正确答案。此答案涉及存储在文件系统中的文件的平台特定EOL序列。此问题是关于协议使用所需的字符。在本例中为邮件协议RFC 821。这清楚地表明您应该使用“=>”\r\n;我的电脑坏了/r/n:(@johnietheblack这可能是因为你使用的是正斜杠而不是反斜杠。是的,我几个小时前刚刚读了Jeff的博客,我看到了这篇文章。巧合?现在链接正在重定向到其他页面,请检查它。这里的问题是两者都可能是正确的。这都取决于你对字符串的处理。Tut 1:您只是在创建字符串(不使用它们)。Tut 2:您是在将字符串传递给函数“mail()”。如果在Tut 1:您将这些字符串直接粘贴到套接字上,它可能会工作(因为它似乎符合RFC 821),但在实现细节方面您已经失败了。在Tut 2:这取决于mail()的文档内容表示是发送字符串的正确方式。在内部,它可能会为您转换文本。
mail($to, $subject, $body, 
    "From: " . $from . "\n" . 
    "bcc: " . $bcc . "\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: multipart/alternative;\n" . 
    "     boundary=" . $mime_boundary_header)
echo 'hi' . PHP_EOL;
echo "hi\n";

$headers = "From: webmaster@example.com" . PHP_EOL 
           . "Reply-To: webmaster@example.com";