1

これを行うフォームのテキスト領域があります。

<textarea rows="4" name="message"></textarea>

PHPでは、フォームが送信されると、次のようになります。

 $text_form = $database -> escape_value($_POST['message']);

次に、PHPMailerを使用して電子メールメッセージの一部として送信されます。

$message .= '<p style="font-family: Arial, verdana, sans-serif;"><strong>Brief Message</strong>: ' . $text_form . '</p>';

最後に、上記で参照したデータベースメソッドを示します。

public function escape_value($value) {
    if ( $this->real_escape_string_exisits ) {
    if ( $this->magic_quotes_active ) { $value = stripslashes( $value ); }
        $value = mysql_real_escape_string($value);
    } else {
        if (!$this->magic_quotes_active ) { $value = addslashes( $value ); }
    }
    return $value;      
}

この上記のメソッドは、Lynda.comチュートリアルから1行ずつ仮想的にコピーされています。

メールで、ユーザーがテキストフィールドでreturnキーを押すと、これが表示されます

これが1行目です。ここでリターンキーを押します。\r\nこれは改行です

\ r \ nが追加されているのはなぜですか?それらの意味は理解できますが、なぜ表示されるのですか?

4

1 に答える 1

2

PHPドキュメントから:

mysql_real_escape_string() は、MySQL のライブラリ関数 mysql_real_escape_string を呼び出します。この関数は、\x00、\n、\r、\、'、"、および \x1a の文字の前にバックスラッシュを追加します。

したがって、文字列には、改行の代わりに 2 つのバックスラッシュとさらに 2 つの文字が含まれるようになりました。

$value問題は、後で何をするかです。これを SQL ステートメントに挿入すると、そのようになるはずです。メールに直接使用する場合は、\r\n改行改行の代わりにリテラルを使用します。

于 2013-01-29T04:31:03.040 に答える