2010-01-22 2 views
15

Простой вопрос ...разница между PHP г п и п

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

Tutorial # 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) 

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

+0

Проблема здесь и то, и другое может быть потенциометрически правильным. Это alldepneds на то, что вы делаете со струнами. Тут 1: вы просто создаете строки (ничего не делая с ними). Тут 2: Вы передаете строки функции «mail()». Если в Tut 1: вы вставляете их непосредственно в сокет, он может работать (как представляется, соответствует RFC 821), но вы неактивны и детализированы в деталях реализации. В Tut 2: это зависит от того, что говорит документация для mail(), является правильным способом отправки строки. Внутри он может преобразовать текст для вас. –

ответ

22

\ 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]"; 
+0

, так что тогда это не имеет значения на клиенте? пример ... при составлении заголовков для моей почты(). если я использую linux, я должен использовать \ n вместо \ r \ n правильно? Или мне нужно беспокоиться о том, что такое система читателя? – johnnietheblack

+0

Это не имеет значения. Просто используйте \ n. Из моего собственного опыта большинство приложений Windows принимают \ n для конца строки. $ headers = "From: [email protected]" .PHP_EOL. "Ответ на: [email protected]"; будет самым безопасным кодом – Yada

+7

Это неправильный ответ. Почтовые заголовки ДОЛЖНЫ быть разделены \ r \ n. – Evert

5

В дополнение к ответу болтовня, вот это объяснить запись в блоге: https://blog.codinghorror.com/the-great-newline-schism/

[Update 2017-05-24: Исправлена ​​ссылка]

+0

Да, я просто читал блог Джеффа пару часов назад, и я увидел этот пост. Совпадение? –

+0

Теперь ссылка перенаправляется на другую страницу, пожалуйста, проверьте ее – Akila

+0

@Akila благодарит, исправил ее. –

6

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

+0

мой компьютер был прикручен/r/n. :( – johnnietheblack

+7

@johnietheblack, вероятно, потому, что вы используете косые черты вместо спинных косых черт. – D34dman

Смежные вопросы