ポータブルである必要があるアプリを書いています。PHP構成でマジッククォートを無効にする必要があることはわかっていますが、この場合、それができるかどうかわからないため、次のコードを使用しています。
if (get_magic_quotes_gpc() === 1)
{
$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);
}
魔法の引用を無効にするプロセスを簡素化するために、私は次のアイデアを思いつきました。
if (get_magic_quotes_gpc() === 1)
{
foreach (array('GET', 'POST', 'COOKIE', 'REQUEST') as $array)
{
${'_'.$array} = unserialize(stripslashes(serialize(${'_'.$array})));
}
}
しかし、試してみたところ、理解できないエラーが発生しました。たとえば、?name=O'Reilly
次のようになります。
serialize($_GET); // a:1:{s:4:"name";s:9:"O\'Reilly";}
stripslashes(serialize($_GET)); // a:1:{s:4:"name";s:9:"O'Reilly";}
しかしunserialize(stripslashes(serialize($_GET)))
、私にこの奇妙なエラーを与えます:
注意:unserialize():32バイトのオフセット30でエラーが発生しました
編集:の長さ属性のため、serialize()
JSON関数を使用するようにコードを変更しました:
if (get_magic_quotes_gpc() === 1)
{
foreach (array('GET', 'POST', 'COOKIE', 'REQUEST') as $array)
{
${'_' . $array} = json_decode(stripslashes(json_encode(${'_' . $array})), true);
}
}
しかし、$_GET
アレイが空になりつつあるのですが、その理由を誰かに説明してもらえますか?