PHP マジック:パラメータ名にドット(.)を使ってはいけない
register_global を有効にした場合、パラメータ名にドットがあると不都合があるという理由で、リクエストのパラメータ名にドット(.)が含まれていると無条件にアンダースコア(_)に変換されることが分かった。
この変換ルールは、 $_POST, $_GET, $_COOKIE, $_REQUEST などの変数にも適用される。
正確なパラメータ名が知りたい場合は、自分でパースする必要がある。
変換前の値を取得するには、
$_GET:
<?php $source = $_SERVER['QUERY_STRING'];
$_POST:
<?php $source = file_get_contents('php://input');
$_COOKIE: (Apache モジュールの場合のみ可能)
<?php $headers = getallheaders(); $source = $headers['Cookie'];
変換前の値を元にパラメータを取得する(POST の例)
http://stackoverflow.com/questions/68651/can-i-get-php-to-stop-replacing-characters-in-get-or-post-arrays
<?php // Function to fix up PHP's messing up POST input containing dots, etc. function getRealPOST() { $pairs = explode("&", file_get_contents("php://input")); $vars = array(); foreach ($pairs as $pair) { $nv = explode("=", $pair); $name = urldecode($nv[0]); $value = urldecode($nv[1]); $vars[$name] = $value; } return $vars; } ?>