mail()
PHPの関数を使用するときに、文字がどのようにエスケープされるかの背後にあるロジックを理解するのに問題があります。私は PHP 5.2 を使用しており、magic_quotes_qpc をオンにし、runtime/sybase をオフにしています。これが問題です。
テキスト入力を受け取るフォームがあり、次の
mysqli_real_escape
ような SQL ステートメントで使用するために特殊文字をエスケープするために使用します。$text = mysqli_real_escape_string($dbc, $_GET['text']);
次のコメントを入力すると、「私はそれを食べません!」フォームに入力すると、データベースに次のように表示されます-「私はそれを食べません!」、これは私が期待するものです. キャリッジ リターン/改行を追加すると、phpMyAdmin のデータベース フィールドに表示されるのは、特殊文字のないキャリッジ リターンと改行だけです (つまり、"\r\n" などはありません)。
関数を使用し
mail
てメッセージを送信すると (つまりmail($to, $subject, $text, $headers)
)、電子メールの本文に次のような奇妙なものが表示されます。I wouldn\\\'t eat that\r\nI couldn\\\'t eat that
結局のところ、メール出力をフォーム入力とまったく同じようにフォーマットしたいだけです。つまり、次のようになります。
I wouldn't eat that
I couldn't eat that
アポストロフィの前にトリプル エスケープがある理由と、\r\n がメールに表示される理由がわかりません。