Чистая ссылка на поисковый фильтр php

0

У меня есть функция очистки ссылки, когда я фильтрую результаты поиска

function cleanLink($url,$remove){
  $aQ = explode("&",str_replace("?", "", $url));
  foreach ($aQ as $part) {
    $pos = strpos($part, $remove);
    if ($pos === false)
        $queryClean[] = $part;
  }
  $line = implode("&", $queryClean);
  return "?".$line;
}

$linkACTUAL = "".$_SERVER["QUERY_STRING"];
cleanLink($linkACTUAL, "q=");
echo $linkACTUAL."&q=".$word;

Это отлично работает, например, если мой URL-адрес

www.mysite.com/?q=wordx

Я хочу добавить "буквенный алфавит порядка", поэтому мой url возвращает

www.mysite.com/?q=wordx&order=desc

но если моя строка запроса пуста (например, www.mysite.com/), возврат

www.mysite.com/?&q=word

Как удалить строку & если строка запроса пуста?

  • 0
    Форматирование кода и читаемость (синтаксическая полировка)
Теги:

3 ответа

0

+ Изменить

if ($pos === false)

в

 if ($pos === false && $part)

опустить пустую строку $ part (будет оцениваться как false). Вы также должны инициализировать $ queryClean

$queryClean = array();
  • 0
    все тот же, вернуть тот же результат
0

Если ваша функция работает нормально, когда есть строка запроса, вы можете просто поместить свой вызов функции внутри, если инструкция типа

if(!empty($_GET))
{
  $linkACTUAL = "".$_SERVER["QUERY_STRING"];
  cleanLink($linkACTUAL, "q=");
  echo $linkACTUAL."&q=".$word;
}

Обновлено:

 echo  (false === strpos($linkACTUAL, "&"))  ? $linkACTUAL."q=".$word : $linkACTUAL."&q=".$word;
  • 0
    я уже сделал это, но, например, я фильтрую результаты по начальной букве, как mysite.com/?initial=a (я не вызываю функцию), теперь мой GET не пуст, а затем я хочу отфильтровать, используя другую букву, такую как b, там я получил mysite.com/?&initial=b.
  • 0
    @ AlvaroLouzada, пожалуйста, проверьте обновленную часть.
0

Вы можете использовать parse_str и http_build_str для удаления параметра из строки запроса. Вы просто убедитесь, что установлен pecl_http> = 0.23.0

function cleanLink($queryString, $remove)
{
    parse_str($queryString, $query);
    if (array_key_exists($remove, $query)) {
        unset($query[$remove]);
    }

    return http_build_str($query);
}

$linkACTUAL = $_SERVER["QUERY_STRING"];

cleanLink($linkACTUAL, "q");
echo $linkACTUAL . "&q=" . $word;

Для получения дополнительной информации см. Http://php.net/manual/en/function.http-build-str.php и http://php.net/manual/de/function.parse-str.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню