function f_stripslashes'($mixed) { if (is_array($mixed)) return array_map('f_stripslashes', $mixed); else return stripslashes($mixed); } if (get_magic_quotes_gpc()) { $_GET = f_rec_stripslashes($_GET); }
array_map — Применяет callback-функцию ко всем элементам указанных массивов
Рекурсия на Википедии
Примеры использования рекурсии на Хабре
Про рекурсию я знаю и про калл бак тоже читал. По отдельности каждую функцию понимаю, а всё вместе ни бум-бум.
Учитывая, что array_map возвращает массив, то при массиве на входе должна получиться вечная рекурсия, так мне кажется, но на самом деле всё работает исправно.
Или по другому выразить моё непонимание.
Чтобы сработала функция stripslashes, $mixed должен стать не массивом, а этого преобразования нет.
Да, вверху в скрипте описка. Должно быть так:
function f_stripslashes'($mixed) { if (is_array($mixed)) return array_map('f_stripslashes', $mixed); else return stripslashes($mixed); } if (get_magic_quotes_gpc()) { $_GET = f_stripslashes($_GET); }
// В коде лишняя кавычка! function f_stripslashes($mixed) { // если $mixed является массивом то... // ...вызвать эту же функцию отдельно с каждым элементом массива // иначе (т.е. если это не массив) вернуть строку без экранирующих бекслешей } //На PHP 5.4.0 и выше работать не будет!!! //Если в настройках PHP magic_quotes_gpc включен... $_GET = f_stripslashes($_GET); // ...отправить весь массив $_GET на чистку от обратных слешей }
Пошёл плюсик ставить.