PHP \ r \ n和\ n之间的区别

时间:2010-01-22 06:46:24

标签: php syntax

简单的问题......

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

教程#1:

//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 

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

mail($to, $subject, $body, 
    "From: " . $from . "\n" . 
    "bcc: " . $bcc . "\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: multipart/alternative;\n" . 
    "     boundary=" . $mime_boundary_header)

我很困惑,但很明显它有点不同,因为有一个,我的标题有效,而另一个只有有时工作。

3 个答案:

答案 0 :(得分:23)

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

\ n是UNIX系统的行尾字符。

这些字符是不可见的。根据我自己的经验\ n通常也适用于Windows。

有些人更喜欢使用PHP_EOL常量而不是这些字符来实现平台之间的可移植性。

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

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

答案 1 :(得分:6)

根据RFC 821(SMTP协议),邮件标题和内容中的行结尾应始终为\r\n<CR><LF>),但实际上它与大多数邮件无关服务器正确处理所有三种类型的行结尾(据说,一些旧的基于UNIX的行实际上在\r\n而不是\n上阻塞。)

答案 2 :(得分:5)

除了Yada的回答,这里有一个解释博客条目:https://blog.codinghorror.com/the-great-newline-schism/

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