removendo itens de cadeias de URL em PHP
Pergunta
Gostaria muito de receber alguma ajuda aqui:
O que eu quero fazer:
Remover & itemsPerPage = 10 a partir de:
http: //localhost/thi/search/filter.html ? type = featured & page = 2 & itemsPerPage = 10
e criar um link a partir dele:
http: //localhost/thi/search/filter.html ? type = featured & page = 2 & itemsPerPage = 15
aqui está o que eu vim acima com a medida:
<a href="<?php echo url::site(url::current()) . http_build_query($_GET) // don't know what follows ?>"
as funções de enquadramento que estou usando são:
url :: atuais () = retorna URL atual no controlador / formato de acção
url :: local () = retorno absoluto url ou seja http: // localhost / site / controller / action
então eu tenho que remover 'e itemsPerPage' da cadeia resultante na função http_build_query
mas eu estou tendo problemas com a codificação de caracteres e tal! Por favor, ajude!
então aqui está o problema com a codificação de caracteres:
$needle = '&itemsperpage';
$querystring = http_build_query($_GET) . '<br/>';
// echo $querystring . '<br/>';
$pos = strpos($querystring, $needle);
$remove = substr($querystring, ((int)$pos));
echo substr(str_replace($remove, '', $querystring), 1); // returns ';'
Eu não posso remover a string '& itemsPerPage' a partir do resultado de http_build_query que é: 'Type = featured & page = 2 & itemsPerPage = 10' e funções como strstr saídas nada
Solução
Gostaria apenas de fazer isso:
$array = $_GET;
$array['itemsperpage'] = 15;
Em seguida, basta usar o seu código, mas com a nova variável (eo ?
):
<a href="<?php echo url::site(url::current()) . '?' . http_build_query($array)">
Outras dicas
O HttpQueryString classe tem vários métodos para obter, configuração, modificar seqüências de consulta e 'traduzir' os seus conjuntos de caracteres.
Você pode obter o efeito que você está procurando, removendo o elemento itemsperpage
da matriz $_GET
antes de construir a string de consulta.
unset($_GET['itemsperpage']);
E, em seguida, basta usar o código que você já escreveu:
<a href="<?php echo url::site(url::current()) . http_build_query($_GET); ?>">
EDIT: Eu descaracterizou o seu post. Eu pensei que você só queria remover o par de campo / valor do pedido GET. Tudo que você tem a fazer é substituir o valor com o valor que você deseja:
$_GET['itemsperpage'] = 15;
E, em seguida, utilizar o código que você já escreveu.