Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Восстановление входных параметров от магических кавычек
 
 автор: Trianon   (12.04.2006 в 17:52)   письмо автору
 
 

Коллеги. поглядите, плиз. Может ошибки какие есть?
Код должен убрать все лишние слэши из входных параметров скрипта.
(sgan - сокращение от SuperGlobal Array Names)

<?
    
if(get_magic_quotes_gpc())
        foreach(array(
"_GET","_POST","_COOKIE","_REQUEST") as $sgan)
            if(isset($
$sgan))
                foreach($
$sgan as $k =>$v)
                    if(!
is_array($v))
                        $
$sgan[$k] = stripslashes($v);
                     else foreach($
$sgan[$k] as $vk =>$vv)
                             $
$sgan[$k][$vk] = stripslashes($vv);
?>

   
 
 автор: Loki   (12.04.2006 в 22:12)   письмо автору
 
   для: Trianon   (12.04.2006 в 17:52)
 

Меня смущает вот этот фрагмент:
<?
else foreach($$sgan[$k] as $vk =>$vv
                             $
$sgan[$k][$vk] = stripslashes($vv);

Ведь массивы могут иметь и большую вложенность. Тут бы правильнее было вызывать функцию рекурсивно.

   
 
 автор: Trianon   (13.04.2006 в 10:50)   письмо автору
 
   для: Loki   (12.04.2006 в 22:12)
 

Я слабо представляю себе синтаксис определения многомерных массивов во входных полях. Можно пример такой формы?
Кроме того, по идее, с экранированием в области имен ключей массивов тоже надо что-то делать. Но никаких светлых мыслей в голову не приходит.

   
 
 автор: Loki   (13.04.2006 в 12:14)   письмо автору
 
   для: Trianon   (13.04.2006 в 10:50)
 


<input name=test[razdel][rubrika][] type=text>

не то чтобы это часто происходит, но массив с двойным уровнем вложенности мне делать приходилось

   
 
 автор: Trianon   (13.04.2006 в 15:20)   письмо автору
 
   для: Loki   (13.04.2006 в 12:14)
 

А так?
<?
  
function reduce_slashes($src)
  {
    if(!
is_array($src))
        return 
stripslashes($src);
    
$res = array();
    foreach(
$src as $key => $val)
        
$res[stripslashes($key)] = reduce_slashes($val);
    return 
$res;
  }

  if(
get_magic_quotes_gpc())
      foreach(array(
"_GET","_POST","_COOKIE","_REQUEST") as $sgan)
          if(isset($
$sgan))
              foreach($
$sgan as $k =>$v)
                      $
$sgan[$k] = reduce_slashes($v);
?>

   
 
 автор: Loki   (13.04.2006 в 16:09)   письмо автору
 
   для: Trianon   (13.04.2006 в 15:20)
 

Так вроде должно работать. Только надо учесть одну тонкость: до версии 4.3 массив request включал в себя массив _FILES, а за его экранирование magic_quotes_gpc не отвечает.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования