2011-07-19 19 views
0

私は連絡先フォームで作業しています。連絡先メッセージに改行を付けることができます。彼らは<br>に変換する必要があります。何も働いていません。PHPのnl2brが機能しません(代替案もありません)

mail($email_to, $email_subject, 

     '<html><head><title>' . $email_subject . '</title></head><body>' 
    . $text_before_message 
    . str_replace(array("\\r\\n","\\r","\\n"), "<br />", stripslashes($email_body)) 
    . str_replace(array("\r\n","\r","\n"), "<br />", stripslashes($email_body)) 
    . nl2br(stripslashes($email_body)) 
    . str_replace(array('\\r\\n','\\r','\\n'), "<br />", stripslashes($email_body)) 
    . str_replace(array('\r\n','\r','\n'), "<br />", stripslashes($email_body)) 
    . stripslashes(nl2br($email_body)) 
    . nl2br($email_body) 
    . $text_after_message 
    . '</body></html>' 

    , 'MIME-Version: 1.0' . "\r\n" 
    . 'Content-type: text/html; charset=UTF-8' . "\r\n" 
    . 'From: ' . $email_from . "\r\n" 
    . 'To: ' . $email_to . "\r\n"  
); 

入る::

Test. 

Test. 

電子メールでの結果(理由はテストの数回繰り返される):

Test.Test. 

定期的に間隔を置いて配置されてここに私のテストコードですソースコードを見ると改行記号(<br>ではない)が表示されます。

なぜPHPがこれを私にしていますか?この質問はたくさん聞かれるようですが、私が見つけることができる解決策は何の違いもありません。

改行をHTML改行に変換するにはどうすればよいですか?

答えて

2

クイックアンサー:nl2br()を使用してください。

つまり、それは私のために働く。サンダーバードで

$email_to="...me..."; 
$email_from=$email_to; 
$email_subject="HTML test"; 

$text_before_message='<div style="color:red">BEFORE</div>'; 
$text_after_message='<div style="color:red">AFTER</div>'; 
$email_body=<<<EOD 
1 
2 

3 


4 (after two blank lines) 
EOD; 

、少なくとも、私は正しい行間隔(nl2br用()のもの)で、テキストメールを参照してください。私はあなたのコードを接頭辞。私がHTMLとして見ると、正しい間隔と、上下の赤いテキストが表示されます。

< br />を理解していない電子メールクライアントを使用していて、< br>を参照してください。明示的なdoctypeを指定すると助けになるかもしれません(しかし、速いgoogleはそうしないことを示唆しています)。

デバッグのヒント:動作するはずのものがない場合は、手動で行うことを確認してください。私。 < br />(および< br>)を使用する静的HTMLのブロックを使用してテストを行い、それが動作するかどうか確認してください。それはあなたが "どのPHP関数を使用するか"を知っていない場合は間違った質問です。

+0

今朝のデバッグ時に、改行がHTMLでエスケープされていることがわかりました。とにかく、ありがとうございます。str_replace(array( ' '、 ' '、 ' ')、 '
'、stripslashes($ email_body)) – DSKrepps

-1

なぜ簡単にできるのですか?

//here is the pull from the form 
$your_form_text = $_POST['your_form_text']; 

//line 1 fixes the line breaks - line 2 the slashes 
$your_form_text = nl2br($your_form_text); 
$your_form_text = stripslashes($your_form_text); 

//email away 
$message = "Comments: $your_form_text"; 
mail("[email protected]", "Website Form Submission", $message, $headers); 

明らかにヘッダーが必要で、より多くのフィールドが必要ですが、これはテキストエリアです。

0

str_replace関数で二重バックスラッシュを使用すると私にとってはうまくいった。

http://php.net/manual/en/language.types.string.php リテラルの一重引用符を指定するには、バックスラッシュ()でエスケープします。リテラルのバックスラッシュを指定するには、二重にします(\)。他のバックスラッシュのインスタンスはすべてリテラルのバックスラッシュとして扱われます。つまり、\ rや\ nのような他のエスケープシーケンスは、特別な意味を持たずにそのまま出力されます。

関連する問題