2010-01-22 15 views
15

pregunta simple ...diferencia entre PHP r n n

he visto gente me dice utilizar "\ r \ n" en diversos lugares y otros me dicen utilizar "\ n" en el mismo lugar. Estoy seguro de que uno tiene razón y uno está equivocado. Ejemplo - la hora de diseñar electrónico() encabezados:

Tutorial n.º 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 (nótese el argumento de cabecera):

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

Estoy confundido, pero está claro que hace algo de una diferencia, porque con uno, mis encabezados funcionaron, y con el otro solo a veces funcionan.

+0

El problema aquí es que ambos pueden ser correctos. Todo depende de lo que estás haciendo con las cuerdas. Tut 1: Estás creando cadenas (no haciendo nada con ellas). Tut 2: Estás pasando cadenas a una función "mail()". Si en Tut 1: pegas esto directamente en un socket, puede funcionar (ya que parece ajustarse a RFC 821) pero estás deprimido y sucio en los detalles de implementación. En Tut 2: depende de lo que la documentación para mail() dice que es la forma correcta de enviar cadena. Internamente, puede estar convirtiendo el texto por usted. –

Respuesta

22

\ r \ n son caracteres de fin de línea para sistemas Windows.

\ n es el carácter de final de línea para sistemas UNIX.

Estos caracteres son invisibles. Desde mi propia experiencia \ n generalmente también está bien para Windows.

Algunos prefieren utilizar PHP_EOL constante en lugar de estos caracteres para la portabilidad entre plataformas.

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

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

por lo que no importa en el cliente, entonces? ejemplo ... al formular los encabezados de mi correo(). si estoy ejecutando un linux, debería usar \ n en lugar de \ r \ n ¿verdad? O ¿debo preocuparme por cuál es también el sistema del lector? – johnnietheblack

+0

No debería importar. Solo usa \ n. Desde mi propia experiencia, la mayoría de las aplicaciones de Windows aceptan \ n para el final de la línea. $ headers = "De: [email protected]" .PHP_EOL. "Respuesta a: [email protected]"; sería el código más seguro – Yada

+7

Esta es la respuesta incorrecta. Los encabezados de correo DEBEN estar separados por \ r \ n. – Evert

5

Además de la respuesta de Yada, aquí es una entrada de blog explicando: https://blog.codinghorror.com/the-great-newline-schism/

[Actualización 05/24/2017: Se ha corregido el enlace]

+0

Sí, hace solo unas horas que estaba leyendo el blog de Jeff y vi esta publicación. ¿Coincidente? –

+0

ahora el enlace está redirigiendo a alguna otra página, por favor compruébelo – Akila

+0

@Akila gracias, lo arregló. –

6

Según RFC 821 (protocolo SMTP), las terminaciones de línea siempre deben ser \r\n (<CR><LF>) en encabezados de correo y contenido, pero en la práctica no debería importar ya que la mayoría de los servidores de correo manejan correctamente los tres tipos de terminaciones de línea (supuestamente, algunos antiguos basados ​​en UNIX realmente se ahogan en \r\n pero no \n).

+0

mi computadora estaba jodiendo con/r/n. :( – johnnietheblack

+7

@ johnietheblack es probablemente porque está utilizando barras diagonales en lugar de barras diagonales inversas. – D34dman

Cuestiones relacionadas