Eu tenho uma string com um URL completo, incluindo variáveis GET. Qual é a melhor maneira de remover as variáveis GET? Existe uma boa maneira de remover apenas um deles?
Este é um código que funciona, mas não é muito bonito (eu acho):
$current_url = explode('?', $current_url);
echo $current_url[0];
O código acima apenas remove todas as variáveis GET. O URL é, no meu caso, gerado a partir de um CMS, então não preciso de nenhuma informação sobre as variáveis do servidor.
Respostas:
Ok, para remover todas as variáveis, talvez a mais bonita seja
Veja
strtok
aqui .É o mais rápido (veja abaixo) e lida com urls sem um '?' devidamente.
Para pegar um url + querystring e remover apenas uma variável (sem usar uma substituição regex, que pode ser mais rápida em alguns casos), você pode fazer algo como:
Uma substituição regex para remover uma única var pode ter a seguinte aparência:
Aqui estão os tempos de alguns métodos diferentes, garantindo que o tempo seja reiniciado entre as corridas.
shows
strtok vence e é de longe o menor código.
fonte
E se:
fonte
/(\\?|&)the-var=.*?(&|$)/
para remover apenas uma variável específica (the-var
aqui).Se o URL do qual você está tentando remover a string de consulta for o URL atual do script PHP, você pode usar um dos métodos mencionados anteriormente. Se você tiver apenas uma variável de string com um URL e quiser retirar tudo após o '?' você pode fazer:
fonte
?
. Seu código retornará uma string vazia.$url = ($pos)? substr($url, 0, $pos) : $url;
Inspirado pelo comentário de @MitMaro, escrevi um pequeno benchmark para testar a velocidade das soluções de @Gumbo, @Matt Bridges e @justin na proposta na questão:
Resultado: o strtok de @justin é o mais rápido.
Nota: testado em um sistema Debian Lenny local com Apache2 e PHP5.
fonte
Outra solução ... Acho essa função mais elegante, ela também vai remover o '?' se a chave a ser removida for a única na string de consulta.
Testes:
Irá produzir:
»Execute esses testes em 3v4l
fonte
Você não poderia usar as variáveis do servidor para fazer isso?
Ou isso funcionaria ?:
Apenas um pensamento.
fonte
Você pode usar as variáveis de servidor para isso, por exemplo
$_SERVER['REQUEST_URI']
, ou ainda melhor:$_SERVER['PHP_SELF']
.fonte
fonte
Que tal uma função para reescrever a string de consulta, percorrendo o array $ _GET
! Esboço aproximado de uma função adequada
Algo assim seria bom para manter links de paginação, etc.
fonte
basename($_SERVER['REQUEST_URI'])
retorna tudo após e incluindo o '?',Às vezes, no meu código, preciso apenas de seções, então separe-as para que eu possa obter o valor de que preciso imediatamente. Não tenho certeza sobre a velocidade de desempenho em comparação com outros métodos, mas é muito útil para mim.
fonte
Na minha opinião, a melhor maneira seria esta:
Ele verifica se há um parâmetro 'i' GET e o remove se houver.
fonte
basta usar javascript echo'd para livrar o URL de quaisquer variáveis com um formulário em branco de auto-envio:
Em seguida, faça esta função javascript:
fonte