Entfernen von Elementen aus URL-Strings in PHP
Frage
Ich würde etwas Hilfe schätzen hier:
Was ich tun möchte:
entfernen & ItemsPerPage = 10 aus:
http: //localhost/thi/search/filter.html ? type = kennzeichnete & page = 2 & ItemsPerPage = 10
und erstellen Sie einen Link von ihm:
http: //localhost/thi/search/filter.html ? type = kennzeichnete & page = 2 & ItemsPerPage = 15
Hier ist, was ich mit so weit gekommen sind:
<a href="<?php echo url::site(url::current()) . http_build_query($_GET) // don't know what follows ?>"
die Rahmenfunktionen Ich verwende sind:
url :: current () = gibt aktuelle URL in controller / action-Format
url :: Website () = kehrt absolute URL dh http: // localhost / site / controller / action
also muss ich entfernen '& ItemsPerPage' aus dem resultierenden String in der http_build_query Funktion
, aber ich habe Probleme mit Zeichenkodierungen und so! Bitte helfen Sie!
hier ist also das Problem mit Zeichencodierung:
$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 ';'
Ich kann die Zeichenfolge nicht entfernen ‚& ItemsPerPage‘ aus dem Ergebnis der http_build_query das ist: 'Type = kennzeichnete & page = 2 & ItemsPerPage = 10' und Funktionen wie strstr gibt nichts
Lösung
Ich würde dies nur tun:
$array = $_GET;
$array['itemsperpage'] = 15;
Dann benutzen Sie einfach Ihren Code, aber mit den neuen Variablen (und den ?
):
<a href="<?php echo url::site(url::current()) . '?' . http_build_query($array)">
Andere Tipps
Die HttpQueryString Klasse verfügt über mehrere Methoden für das Erhalten, Einstellung, Modifizieren Query-Strings und 'übersetzen' ihre charsets.
Sie können den Effekt erzielen Sie suchen, indem Sie den itemsperpage
Element aus der $_GET
Array zu entfernen, bevor die Query-String zu bauen.
unset($_GET['itemsperpage']);
Und dann benutzen Sie einfach den Code, den Sie schon schrieb:
<a href="<?php echo url::site(url::current()) . http_build_query($_GET); ?>">
EDIT: ich falsch gelesen Ihren Beitrag. Ich dachte, Sie nur das Feld / Wert-Paar der GET-Anfrage entfernen wollten. Alles, was Sie tun müssen, ist der Wert mit dem Wert überschreiben Sie wollen:
$_GET['itemsperpage'] = 15;
Und dann verwenden Sie den Code, den Sie bereits geschrieben haben.