Разница 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
).
Ответ 3
В дополнение к ответу Yada, здесь объясняется запись в блоге: https://blog.codinghorror.com/the-great-newline-schism/
[Обновление 2017-05-24: Исправлена ссылка]