En el hilo de comentarios de la entrada PHP Function: Remove a Query String Key, Value del blog de David Walsh hay un buen puñado de funciones que permiten eliminar parámetros de una URL. Una de ellas me parece una solución más sencilla que la propone el propio David.
La he modificado mínimamente para que ofrezca la posibilidad de eliminar más de un parámetro:
// Elimina los parámetros suministrador mediante la array $keys de la URL $url function remove_url_query_args($url,$keys=array()) { $url_parts = parse_url($url); if(empty($url_parts['query'])) return $url; parse_str($url_parts['query'], $result_array); foreach ( $keys as $key ) { unset($result_array[$key]); } $url_parts['query'] = http_build_query($result_array); $url = (isset($url_parts["scheme"])?$url_parts["scheme"]."://":""). (isset($url_parts["user"])?$url_parts["user"].":":""). (isset($url_parts["pass"])?$url_parts["pass"]."@":""). (isset($url_parts["host"])?$url_parts["host"]:""). (isset($url_parts["port"])?":".$url_parts["port"]:""). (isset($url_parts["path"])?$url_parts["path"]:""). (isset($url_parts["query"])?"?".$url_parts["query"]:""). (isset($url_parts["fragment"])?"#".$url_parts["fragment"]:""); return $url; }
Por ejemplo:
$keys = array("param1","param3"); $url = "http://example.org/?param1=value1&param2=value2&param3=value3"; echo remove_url_query_args($url,$keys); // output: http://example.org/?param2=value2