magic_quotes_gpc
PHP5.2.17とディレクティブが有効になっているサーバーで実行される小さなPHPスクリプトを作成しました。
php.iniファイルへの書き込みアクセス権がないので、ユーザー入力からすべてのスラッシュを削除したいと思います。
これは、magic_quotes_gpc
ディレクティブがオフになっている場合でも機能するはずです(たとえば、スクリプトを別のサーバーに移動する場合)。
また、配列がユーザーによって送信されたときに再帰的に機能する必要があります。
私は組み込み関数を使用することを好みます。
<html>
<head>
<title>HP</title>
</head>
<body>
<form method="POST" action="magic.php">
<input type="text" value="te\\"st" name="test1">
<input type="text" value="te\\"st" name="test2[tw"o]">
<input type="submit" value="submit">
</form>
<?php
echo "<pre>";
echo "magic_quotes: ".get_magic_quotes_gpc()."\n";
echo "<hr>test1";
echo "filter_input: ".filter_input(INPUT_POST, "test1")."\n";
echo "POST: ".$_POST['test1']."\n";
echo "<hr>test2 (filter)";
print_r(filter_input_array(INPUT_POST))."\n";
echo "<hr>test2 (post)";
print_r($_POST)."\n";
echo "</pre>";
?>
</body>
</html>
これにより、サーバーで次の結果が得られます。
magic_quotes: 1
filter_input: te\\"st
POST: te\\\\\"st
test2 (filter)Array
(
[test1] => te\\"st
[test2] => Array
(
[tw\"o] => te\\"st
)
)
test2 (post)Array
(
[test1] => te\\\\\"st
[test2] => Array
(
[tw\"o] => te\\\\\"st
)
)
配列キーを除いて、スラッシュが削除されているようです。
または、スラッシュが追加されることはありませんか?(非推奨であるため、ディレクティブを無視する可能性がfilter_input()
ありますが、その参照は見つかりませんでした)filter_input_array()
magic_quotes_gpc
スラッシュを削除する/設定しない動作は、filter_input()
システムfilter_input_array()
パラメータに依存していますか?ここで
の警告がわかりません。