7

引用符にスラッシュが付いているタグから$_POST変数が入っています。魔法の引用符がオフになっていることはわかっています。オフになっている場合は、if(get_magic_quotes_gpc())ステートメントを使用してスラッシュを削除します。ただし、スラッシュはまだ追加されています。何故ですか?

<form method="POST" action="">
<input type="text" name="spe_set" />
<input type="submit" value="Submit" />
</form>

PHP

print_r($_POST['spe_set']); // if I wrote "Test's", this prints as "Test\'s"

だから、私はしました、

if ( get_magic_quotes_gpc() )
    $tempvar = stripslashes($_POST['spe_set']);
else
    $tempvar = $_POST['spe_set'];

print_r($tempvar); // Still says "Test\'s"
4

3 に答える 3

7

オンラインで誤った結果を返すための参照がオンラインで見つからないため、get_magic_quotes_gpc()代わりに、問題を絞り込むためのチェックリストを提供します(これはおそらくコメントであるはずですが、それには長すぎます):

最初に行うことは、ファイルを編集して、php.inimagic_quotes_gpcが実際にオフに設定されていることを確認することです。これを試すのに最適な場所は、問題が発生しているスクリプトと同じディレクトリにファイルを作成/編集することです。これはphp.ini、スクリプトに到達する前にINI設定をオーバーライドできる最後の場所です(global_quotes_gpcはオーバーライドできません。スクリプトが実行されるまでに、損傷はすでに発生しています)。

php.iniファイルに次の行を追加します。

magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

それらの最初のものだけがPOST変数に影響します(「gpc」は「Get、Post、およびCookies」を表します)が、それらはすべて吸うので、すべてを設定するのは良いことです。

これらの行を設定した後、魔法の引用符が実際にオフになっていることを確認できます。これで問題が解決した場合は、ディレクトリ構造を調べて、最初にオンになった場所を探す必要があります。これは、上位ディレクトリphp.iniのファイル、.htaccessファイル、またはファイルにある可能性がありhttp.confます。ここで何をしているのかわからない場合は、ホストを関与させることをお勧めします。

addslashes()問題が解決しない場合は、スクリプト内の関数への呼び出しを確認する必要があります。grep -ir "addslashes" *Linuxを使用している場合は、プロジェクトのルートディレクトリからコマンドを実行できるため、これは簡単です。Windowsで実行している場合は、Cygwin、unxutils、または別のUNIXレイヤーを調べる必要があります。私はunxutilsが大好きで、Windowsのセットアップや新しい仕事で最初にインストールするものの1つです。

フレームワークにこのようなものが組み込まれている理由はわかりませんが、一部の馬鹿がそれを試す可能性があると思います。grepそのため、フレームワークファイルも確認する必要があります。フレームワークで提供されているファイルを必ず確認してくださいphp.ini。ただし、これについては、上記ですでに説明した内容で説明する必要があります。

最後に、必ずに設定する必要がありerror_reportingますE_ALL | E_STRICT。これは、php.iniファイルから、またはerror_reporting()関数を使用して実行できます。他のPHPを実行する前に、これが設定されていることを確認してください。エラーがユーザーの前に表示される前に、どんなに小さくてもすべてのエラーを確認できるように、常に最高のエラー報告設定で開発する必要があります。これらのエラーを確認するには、表示エラーも有効になっていることを確認してください。

質問に貼り付けたコードサンプルは有効ですが、コードからの直接のコピー/貼り付けではない場合、または偶然にエラーの原因となっている他のコードがある場合に備えて、error_reportingについて説明しました。get_magic_quotes_gpc()エラーレポートを設定することにより、またはの正しい機能をブロックしている可能性のあるエラーを確認できますstripslashes()。これらのエラーを修正できれば、残りのコードは意図したとおりに機能します。

幸運を。

于 2011-07-29T01:28:52.577 に答える
2

時々あなたは古いxtcommerceのような愚かな古いシステムにいます。自分で「魔法」を実行する関数を含むファイル/admin/includes/functions/compatibility.phpがあります。

if (!get_magic_quotes_gpc()) {
    do_magic_quotes_gpc($_GET);
    do_magic_quotes_gpc($_POST);
    do_magic_quotes_gpc($_COOKIE);
}

..条件を編集するか削除して、これを停止する必要があります。

于 2013-04-04T15:00:51.613 に答える
1

このコードを試してください

$tempvar = str_replace('\\', '', $_POST['spe_set']);

それはそれらを確実に取り除くべきです

于 2011-07-28T23:06:34.403 に答える