なぜ php_flag が s を与えるのかはわかりませんが、マジック クォートがオンになっているかどうかを検出し、実行時にスーパーグローバルから削除する例がPHP のマニュアル500 Internal Server Error
にあることを指摘しておきます。投稿された他のものとは異なり、これは再帰的であり、配列から引用符を正しく削除します:
更新: 今日、PHP マニュアルに、代わりにスーパーグローバルへの参照を使用する次のコードの新しいバージョンがあることに気付きました。
古いバージョン:
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
$_POST = array_map('stripslashes_deep', $_POST);
$_GET = array_map('stripslashes_deep', $_GET);
$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
?>
新しいバージョン:
<?php
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
?>