Опять PHP — скрытая подмена понятий :)

<?
print_r ($_POST);
?>
<form method="POST">
<input name="через пробел">
<input type="submit">
</form>

Как вы думаете, что выведет print_r? Array ( [через пробел] => ) ? А вот и нифига!

Он выведет Array ( [через_пробел] => )

Вот такая зашитая фича. Для пробелов и точек.

Берется отсюда:

В файле main/php_variables.c, php_register_variable_ex
(92 строка для PHP 5.1.4):

/* ensure that we don't have spaces or dots in the variable name (not binary
safe) */
for (p = var; *p; p++) {
if (*p == ' ' || *p == '.') {
*p='_';
} else if (*p == '[') {
is_array = 1;
ip = p;
*p = 0;
break;
}
}

var_len = p — var;

Почему? Зачем? Не нашёл. Факт остаётся фактом. Нот бинари сейф, йоптыж.

Комментировать

Войдите чтобы оставить комментарий.