Разница PHP между \r\n и\n

Простой вопрос...

Я видел, как люди говорили мне использовать "\ r\n" в разных местах, а другие говорят мне использовать "\n" в одном месте. Я уверен, что человек прав, а один ошибается. Пример - при создании заголовков mail():

Учебное пособие № 1:

//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
//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)

Я смущен, но, разумеется, это имеет какое-то значение, потому что с одним работали мои заголовки, а с другой они работают только иногда.

Ответы

Ответ 1

\ r\n - символы конца строки для систем Windows.

\n - это символ конца строки для систем UNIX.

Эти символы невидимы. Из моего собственного опыта \n обычно подходит для Windows.

Некоторые предпочитают использовать PHP_EOL константу вместо этих символов для переносимости между платформами.

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

$headers = "From: [email protected]" . PHP_EOL 
           . "Reply-To: [email protected]"; 

Ответ 2

В соответствии с RFC 821 (протокол SMTP) окончание строк должно всегда \r\n (<CR><LF>) в заголовках и контенте почты, но на практике это не имеет значения, поскольку большинство почтовых серверов правильно обрабатывают все три типа окончаний строки (предположительно, некоторые старые UNIX файлы фактически задыхаются от \r\n, но не \n).