2010-01-22 23 views
15

Domanda semplice ...differenza tra PHP r n n

ho visto la gente mi dice di usare "\ r \ n" in vari luoghi e gli altri mi dicono di usare "\ n" in lo stesso posto. Sono sicuro che uno ha ragione e uno è sbagliato. Esempio - durante la progettazione di mail() intestazioni:

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."\""; 

Tutorial # 2 (notare l'argomento intestazione):

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

Sono confuso, ma è chiaro che mi fa un po ' di una differenza, perché con uno, i miei header hanno funzionato, e con l'altro sono solo a volte il lavoro.

+0

Il problema qui è che entrambi possono essere potenzialmente corretti. È tutto sommato su quello che stai facendo con le corde. Tut 1: stai solo creando stringhe (non facendo nulla con loro). Tut 2: stai passando le stringhe a una funzione "mail()". Se in Tut 1: le si attaccano direttamente su un socket, potrebbe funzionare (in quanto sembra conforme a RFC 821) ma si è malconci nei dettagli dell'implementazione. In Tut 2: dipende da ciò che la documentazione per mail() dice è il modo corretto per inviare una stringa. Internamente potrebbe convertire il testo per te. –

risposta

22

\ r \ n sono caratteri di fine riga per i sistemi Windows.

\ n è il carattere di fine riga per i sistemi UNIX.

Questi caratteri sono invisibili. Dalla mia esperienza \ n di solito va bene anche per Windows.

Alcuni preferiscono utilizzare la costante PHP_EOL anziché questi caratteri per la portabilità tra le piattaforme.

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

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

quindi non ha importanza sul client allora? esempio ... durante la formulazione delle intestazioni per la mia posta(). se sto usando Linux, dovrei usare \ n invece di \ r \ n giusto? O devo preoccuparmi anche del sistema del lettore? – johnnietheblack

+0

Non dovrebbe importare. Basta usare \ n. Dalla mia esperienza, la maggior parte delle app di Windows accetta \ n per il fine linea. $ headers = "Da: [email protected]" .PHP_EOL. "Reply-To: [email protected]"; sarebbe il codice più sicuro – Yada

+7

Questa è la risposta sbagliata. Le intestazioni di posta DEVONO essere separate da \ r \ n. – Evert

5

Oltre alla risposta di Yada, qui è un post di blog che spiega: https://blog.codinghorror.com/the-great-newline-schism/

[Aggiornamento 2017/05/24: Corretto il link]

+0

Sì, stavo leggendo il blog di Jeff qualche ora fa e ho visto questo post. Coincidente? –

+0

ora il collegamento sta reindirizzando verso un'altra pagina, per favore check it out – Akila

+0

@Akila grazie, risolto. –

6

Come per RFC 821 (il protocollo SMTP), le terminazioni di linea dovrebbero sempre essere \r\n (<CR><LF>) nelle intestazioni e nei contenuti della posta, ma in pratica non dovrebbe avere importanza in quanto la maggior parte dei server di posta gestisce correttamente tutti e tre i tipi di terminazioni di linea (presumibilmente, alcuni vecchi basati su UNIX effettivamente soffocano su \r\n ma non \n).

+0

il mio computer stava rovinando con/r/n. :( – johnnietheblack

+7

@johnietheblack probabilmente causa l'uso di barre in avanti invece di barre posteriori. – D34dman

Problemi correlati