У меня есть функция очистки ссылки, когда я фильтрую результаты поиска
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
Как удалить строку &
если строка запроса пуста?
+ Изменить
if ($pos === false)
в
if ($pos === false && $part)
опустить пустую строку $ part (будет оцениваться как false). Вы также должны инициализировать $ queryClean
$queryClean = array();
Если ваша функция работает нормально, когда есть строка запроса, вы можете просто поместить свой вызов функции внутри, если инструкция типа
if(!empty($_GET))
{
$linkACTUAL = "".$_SERVER["QUERY_STRING"];
cleanLink($linkACTUAL, "q=");
echo $linkACTUAL."&q=".$word;
}
Обновлено:
echo (false === strpos($linkACTUAL, "&")) ? $linkACTUAL."q=".$word : $linkACTUAL."&q=".$word;
Вы можете использовать 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