2010-01-22 7 views
15

Simple question ...différence entre PHP r n n

J'ai vu des gens me disent utiliser "\ r \ n" dans divers endroits et d'autres me disent utiliser "\ n" dans le même endroit. Je suis sûr que l'un a raison et que l'autre a tort. Exemple - lors de la conception électronique() têtes:

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

Tutoriel # 2 (notez l'argument d'en-tête):

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

Je suis confus, mais il est clair qu'il rend un peu d'une différence, parce que, avec un, mes en-têtes travaillaient, et avec l'autre, ils ne fonctionnaient que de temps en temps.

+0

Le problème est que les deux peuvent être corrects. Tout dépend de ce que vous faites avec les cordes. Tut 1: Vous créez juste des cordes (ne faisant rien avec eux). Tut 2: Vous passez des chaînes à une fonction "mail()". Si dans Tut 1: vous les collez directement sur une socket cela peut fonctionner (comme il semble être conforme à la RFC 821) mais vous êtes en bas et sale dans les détails d'implémentation. Dans Tut 2: cela dépend de ce que la documentation de mail() dit être le bon moyen d'envoyer une chaîne. En interne, il peut être en train de convertir le texte pour vous. –

Répondre

22

sont des caractères de fin de ligne pour les systèmes Windows.

\ n est le caractère de fin de ligne pour les systèmes UNIX.

Ces caractères sont invisibles. De ma propre expérience \ n est généralement correct pour Windows.

Certains préfèrent utiliser PHP_EOL constante au lieu de ces caractères pour la portabilité entre les plates-formes.

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

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

donc ce n'est pas important sur le client alors? exemple ... lors de la formulation des en-têtes de mon courrier(). si je cours un linux, je devrais employer \ n au lieu de \ r \ n droit? OU dois-je m'inquiéter de ce que le système du lecteur est également? – johnnietheblack

+0

Ça ne devrait pas avoir d'importance. Utilisez simplement \ n. De ma propre expérience, la plupart des applications Windows acceptent \ n pour la fin de la ligne. $ headers = "De: [email protected]" .PHP_EOL. "Reply-To: [email protected]"; serait le code le plus sûr – Yada

+7

Ceci est la mauvaise réponse. Les en-têtes de courrier DOIVENT être séparés par \ r \ n. – Evert

5

En plus de la réponse de Yada, voici une entrée de blog expliquant: https://blog.codinghorror.com/the-great-newline-schism/

[Mise à jour 24/05/2017: Correction du lien]

+0

Oui, je lisais juste le blog de Jeff quelques heures en arrière et j'ai vu ce post. Coïncident? –

+0

maintenant le lien redirige vers une autre page s'il vous plaît vérifier dehors – Akila

+0

@Akila merci, l'a fixé. –

6

Comme par RFC 821 (le protocole SMTP), les fins de ligne devraient toujours être \r\n (<CR><LF>) dans les en-têtes et le contenu, mais en pratique cela ne devrait pas poser de problème car la plupart des serveurs de messagerie traitent correctement les trois types de terminaisons de ligne (\r\n\n).

+0

mon ordinateur était en train de bousiller avec/r/n. :( – johnnietheblack

+7

@johnietheblack c'est probablement parce que vous utilisez des barres obliques à la place des barres obliques inversées. – D34dman

Questions connexes