3

重複の可能性:
PHP メールフォームの文字を正しくエンコードする (「I'm」が「I\'m」に変わる)

PHP 経由でメールを送信すると、引用符の直前にスラッシュが付いたテキストが届きます。

I'mになるI\'m

私のPHP:

$text_message = $_POST["mymessage"];       


$message="--PHP-mixed-$bound_text\r\n"      
            ."Content-Type: text/plain; charset=\"utf-8\"\r\n"
 ."Content-Transfer-Encoding: 7bit\r\n\r\n" 
       ."$text_message\r\n\r\n" 
    ."--PHP-mixed-$bound_text\r\n"  
            ."Content-Transfer-Encoding: base64\r\n"
            ."Content-Disposition: attachment; filename=\"$attachment\"\r\n"
."Content-Type: image/jpeg; name=\"$attachment\"\r\n\r\n"
 .chunk_split($file)
        ."\r\n\r\n"
            ."--PHP-mixed-$bound_text--\r\n\r\n";
}

余分なスラッシュを受信せずに送信するにはどうすればよいですか? ありがとう。ウリ

4

3 に答える 3

4

これは PHP のマジック クォートが原因であり、これは非推奨ですが、残念ながらデフォルトで有効になっています。ほとんどの場合、.htaccessファイルまたは Webhoster のコントロール パネルから機能を無効にすることができます。

それが不可能な場合は、get_magic_quotes_gpc()やみくもに を使用する前に、魔法の引用符が有効になっているかどうかを確認するのが最も安全stripslashes()です。$_POST[]すべての変数をエスケープ解除するには、次を使用します。

if (get_magic_quotes_gpc()) {
    foreach($_POST as $k => $v) {
       $_POST[$k] = stripslashes($v);
    }
}
于 2012-02-29T23:22:57.457 に答える
2

php.ini ファイル内で magic_quotes を確認する必要があります。ほとんどの場合、オンになっています。php 内でこのオプションをいつでも確認し、それに応じて文字列を処理できます。

if (get_magic_quotes_gpc()){
   $text_message = stripslashes($_POST["mymessage"]);
}else{
   $text_message = $_POST["mymessage"];
}

また、使用する代わりに、すべてのオペレーティング システムと互換性のあるものを使用\r\nする必要があります。たとえば、 Linux には必要ありません。PHP_EOL\r

于 2012-02-29T23:20:38.017 に答える
1

にかかっていると思われ$_POST["mymessage"]ます。$_POST["mymessage"]画面にエコーすると何が得られますか?

一部の Web ホストは、SQL インジェクションに対する基本的な保護として、 、 などaddslashes()によって受信されたデータに意図的にアクセスします。$_POST$_GET

それが行われている場合、あなたはできるはずですstripslashes($_POST["mymessage"])

于 2012-02-29T23:12:55.210 に答える