2012-01-08 8 views
5

Ho la posta PHP(): funzione che funziona per un modulo che sto usando sul mio sito. Ora sto provando a formattare l'attributo $ body per apparire più bello e più organizzato quando ricevo la successiva e-mail.

ho provato \ n ed ho provato
ed entrambi mi danno

Ecco il frammento di codice che sto lavorando con (credo che sia solo una questione di sintassi che sto facendo sbagliato):

if(!empty($brandname) && !empty($firstname) && !empty($lastname) && !empty($email) && !empty($goals) && !empty($bio)){ 
     $to = '[email protected]'; 
     $subject = 'Submission Form'; 
     $body = 'Brand Name: '.$brandname.'<br />Name: '.$firstname.' '.$lastname.'<br />Email: '.$email.'<br />About the Company:'.$bio; 
     $headers = 'From: '.$email; 

è solo visualizzato il <br /> come testo nella e-mail che ricevo. Era lo stesso quando usavo \ n (che presumo sia in realtà il modo giusto per farlo). Che cosa sto facendo di sbagliato? Grazie.

risposta

7

È necessario inserire \ n in virgolette doppie "non tra virgolette singole 'Se vuoi che questa sequenza sarebbe essere interpretato come una nuova linea (Line Feed 0x0A) carattere

Date un'occhiata a questa documentazione php:

http://php.net/manual/en/language.types.string.php

1

modo più semplice per questo

$newline = ' 
'; 

utilizzare la variabile $ a capo ovunque tu voglia (:

+3

A seconda di dove si digita il tasto Invio, si ottengono risultati diversi in quanto Mac, Window e Linux gestiscono newline con combinazioni diverse di '\ r' e' \ n'. –

1

Dal manual page of the mail() function, apprendiamo che per inviare e-mail in formato HTML, è necessario aggiungere intestazioni aggiuntive. Questo è sinteticamente dimostrato in Example #4.

Tuttavia, per le interruzioni di riga, non consiglierei l'utilizzo di HTML. Per fare ciò, inserisci semplicemente "\ n" nella stringa, assicurandoti di usare le virgolette doppie, come menzionato da Abraham.

2

uso "<br>" invece di \n che funzionerà al 100% la mia scoperta

esempio

$subject="Mail from customer ".$_POST['Name'].`"<br>"`; 

Enjoy :)

2

(PHP 4, PHP 5)

$body = 'Brand Name: '.$brandname."\r\n".'Name: '.$firstname.' '.$lastname."\r\n".'Email: '.$email."\r\n".'About the Company:'.$bio; 

Usa "\r\n" per newline come sopra

+0

Questo funziona. Grazie – KarenAnne

0

Non è stato possibile aggiungere un commento alla risposta di Mohammad Saqib, ma volevo dire che non si dovrebbe usare <br> in sostituzione di \r\n perché ciò potrebbe causare il blocco dei messaggi di posta elettronica da filtri di spam "troppo lunghi" . Le nuove linee sono importanti per mantenere l'e-mail più umana e consentire una consegna di successo!

Il metodo che consiglio è:

$output[] = "line 1"; 
$output[] = "line 2"; 
$EmailBody = join("\r\n",$output); 

Inoltre è necessario assicurarsi che si 'disinfettare' intestazioni per evitare l'iniezione colpo di testa da input dell'utente, qui è una funzione che è il doppio sicuri di fermare l'iniezione:

function sanitize(&$data){ 
    return str_ireplace(array("\r", "\n", "%0a", "%0d"), '', stripslashes($data)); 
} 


$headers = 'From: '.sanitize($email); 

Se si voleva tag HTML per mostrare nella email, modificare il tipo utilizzando l'intestazione:

$headers = 'Content-type: text/html;\r\nFrom: '.sanitize($email); 

Se hai visualizzato HTML, devi pulire l'input dell'utente per evitare qualcosa di inaspettato ... ad esempio l'iniezione di HTML. Utilizzare questa funzione ovunque si visualizzi l'input dell'utente in HTML:

function htmlclean($str){ 
    return htmlentities($str, ENT_QUOTES); 
} 

ad es. $ body = "Marca:". htmlclean ($ marchio);