Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Удаление пустых параметров из GET

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ammiak
Отправлено: 16 Февраля, 2014 - 09:02:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Добрый день
Удаляю пустые параметры из URL, получая новый URL. Новый адрес получается верным, но при попытке поставить на него редирект, выдает ошибку, о том что невозможно отобразить страницу. Подскажите пожалуйста, из-за чего это может происходить?
Вот код
PHP:
скопировать код в буфер обмена
  1.  
  2. parse_str($_SERVER['QUERY_STRING'], $vars);
  3.  
  4. $s = '';
  5. foreach ($vars as $k=>$v)
  6.     {
  7.     if ($v <> '') {
  8.     $s .= (($s) ? '&' : '').$k.'='.$v;
  9.     }
  10.     }
  11.  
  12. $s = '?'.$s;
  13.  
  14. if (!headers_sent()) header('Location: '.$s, true, 301);
  15.  

(Отредактировано автором: 16 Февраля, 2014 - 09:05:49)

 
 Top
EuGen Администратор
Отправлено: 16 Февраля, 2014 - 09:15:23
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Это потому, что QUERY_STRING не является тем, что можно использовать для parse_str в его первоначальном виде. Но в PHP есть специальные функции. Например,
PHP:
скопировать код в буфер обмена
  1. //'/post.php?foo=5&bar=&baz=2&bee=&fee=&feo=8'
  2. $queryString = $_SERVER['QUERY_STRING'];
  3. $queryUrl    = parse_url($queryString); //path, query
  4. parse_str($queryUrl['query'], $args);
  5. $args        = array_filter($args);
  6. $queryString = $queryUrl['path'].(count($args)
  7.                ?'?'.http_build_query($args)
  8.                :'');
  9. //"/post.php?foo=5&baz=2&feo=8"


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ammiak
Отправлено: 16 Февраля, 2014 - 09:53:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




EuGen Спасибо что откликнулись.
Немного переписал свой код с учетом указанных Вами функций, но все равно почему-то не редиректит:
PHP:
скопировать код в буфер обмена
  1.  
  2.     $queryString = $_SERVER['QUERY_STRING'];
  3. $queryUrl = parse_url($queryString);
  4. foreach($queryUrl as $query) {
  5.   parse_str($query, $args);
  6.  
  7.   $args=array_diff($args, array(''));
  8. }
  9.  
  10. if (!headers_sent()) header('Location: ?'.http_build_query($args), true, 301);
  11.  
 
 Top
EuGen Администратор
Отправлено: 16 Февраля, 2014 - 12:28:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ammiak пишет:
Немного переписал свой код

Зачем? Код выше вполне корректно фильтрует параметры, никакой модификации не требуется. Проверьте, что получается в итоге - и можно ли по такому URL перейти.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ammiak
Отправлено: 16 Февраля, 2014 - 13:04:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Проверил Ваш пример со строкой - действительно все работает, но мой url почему-то даже не очищается от пустых параметров. Привожу полностью:
PHP:
скопировать код в буфер обмена
  1.  
  2. $queryString = $_SERVER['QUERY_STRING'];   //мой URL: arrFilter_196_73887=Y&arrFilter_197_8145817=&set_filter=%CF%EE%EA%E0%E7%E0%F2%FC
  3. $queryUrl    = parse_url($queryString); //path, query
  4. parse_str($queryUrl['query'], $args);
  5. $args        = array_filter($args);
  6. $queryString = $queryUrl['path'].(count($args)
  7.                ?'?'.http_build_query($args)
  8.                :'');
  9.                echo $queryString;   //arrFilter_196_73887=Y&arrFilter_197_8145817=&set_filter=%CF%EE%EA%E0%E7%E0%F2%FC
  10.  

(Отредактировано автором: 16 Февраля, 2014 - 13:05:03)

 
 Top
EuGen Администратор
Отправлено: 16 Февраля, 2014 - 13:24:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ammiak пишет:
//мой URL: arrFilter_196_73887=Y&arrFilter_197_8145817=&set_filter=%CF%EE%EA%E0%E7%E0%F2%FC

Это не похоже на QUERY_STRING и не сгодится для перехода даже после удаления всех пустых параметров. На случай таких данных достаточно добавить ветку:
PHP:
скопировать код в буфер обмена
  1. $queryString = $_SERVER['QUERY_STRING']; //'arrFilter_196_73887=Y&arrFilter_197_8145817=&set_filter=%CF%EE%EA%E0%E7%E0%F2%FC';
  2. $queryUrl    = parse_url($queryString); //path, query
  3. if(isset($queryUrl['query']))
  4. {
  5.    parse_str($queryUrl['query'], $args);
  6.    $args        = array_filter($args);
  7.    $queryString = $queryUrl['path'].(count($args)
  8.                   ?'?'.http_build_query($args)
  9.                   :'');
  10. }
  11. else
  12. {
  13.    parse_str($queryUrl['path'], $args);
  14.    $args        = array_filter($args);
  15.    $queryString = http_build_query($args);
  16. }
  17. var_dump($queryString);   //arrFilter_196_73887=Y&set_filter=%CF%EE%EA%E0%E7%E0%F2%F

- но полученный способ хоть и будет решать задачу удаления пустых параметров, но перейти по такому адресу не получится. Нужно добавлять $_SERVER['HTTP_HOST'] к примеру, чтобы получить корректный URL.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ammiak
Отправлено: 16 Февраля, 2014 - 19:15:34
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




EuGen
Пробовал даже так (см. ниже)-все равно не редиректит. Может быть есть какие-то варианты, все-таки нужен именно такой url
PHP:
скопировать код в буфер обмена
  1.  
  2.         $queryString = "http://".$_SERVER['SERVER_NAME'].$_SERVER['QUERY_STRING'];  
  3.     $queryUrl    = parse_url($queryString); //path, query
  4.     if(isset($queryUrl['query']))
  5.     {
  6.        parse_str($queryUrl['query'], $args);
  7.        $args        = array_filter($args);
  8.        $queryString = $queryUrl['path'].(count($args)
  9.                       ?'?'.http_build_query($args)
  10.                       :'');
  11.     }
  12.     else
  13.     {
  14.        parse_str($queryUrl['path'], $args);
  15.        $args        = array_filter($args);
  16.        $queryString = http_build_query($args);
  17.     }
  18.      if (!headers_sent()) header('Location: '.$queryString);
  19.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB