Ich möchte GET-Parameter zu URLs hinzufügen, die GET-Parameter enthalten können und nicht, ohne ?
oder zu wiederholen &
.
Beispiel:
Wenn ich hinzufügen möchte category=action
$url="http://www.acme.com";
// will add ?category=action at the end
$url="http://www.acme.com/movies?sort=popular";
// will add &category=action at the end
Wenn Sie bemerken, dass ich versuche, das Fragezeichen nicht zu wiederholen, wenn es gefunden wurde.
Die URL ist nur eine Zeichenfolge.
Was ist ein zuverlässiger Weg, um einen bestimmten GET-Parameter anzuhängen?
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Sie benötigenpecl install pecl_http
oder installieren jakeasmith / http_build_url über Composer.Antworten:
Grundlegende Methode
Weiter fortgeschritten
Sie sollten dies zumindest in eine Funktion einfügen, wenn nicht in eine Klasse.
quelle
?logout
kann mitisset($_GET["logout"])
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Sie benötigenpecl install pecl_http
oder installieren jakeasmith / http_build_url über Composer.Hier ist eine kürzere Version der akzeptierten Antwort:
Bearbeiten: Wie in der akzeptierten Antwort erläutert, ist dies insofern fehlerhaft, als nicht überprüft wird, ob
category
bereits vorhanden. Eine bessere Lösung wäre, das zu behandeln,$_GET
was es ist - ein Array - und Funktionen wie zu verwendenin_array()
.quelle
.
vor dem=
.$url
bereits Parameter vorhanden sind. Bearbeitet.#
.quelle
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Sie benötigenpecl install pecl_http
oder installieren jakeasmith / http_build_url über Composer.Verwenden Sie strpos , um ein? Zu erkennen. Schon seit ? kann nur in der URL am Anfang einer Abfragezeichenfolge angezeigt werden. Sie wissen, ob dort bereits Abrufparameter vorhanden sind, und Sie müssen Parameter mit & hinzufügen
quelle
Diese Funktion überschreibt ein vorhandenes Argument
quelle
$info['query']
Set vorhanden ist? Das hast du nicht berücksichtigt.Beispiel mit Aktualisierung vorhandener Parameter.
Es wird auch url_encode verwendet und die Möglichkeit, keinen Parameterwert anzugeben
quelle
quelle
$query = $a['query'] ? $a['query'] : '';
durch$query = isset($a['query']) ? $a['query'] : '';
quelle
quelle
Ich denke, du solltest es so machen.
quelle
Nachdem ich nach vielen Ressourcen / Antworten zu diesem Thema gesucht hatte, entschied ich mich, meine eigenen zu codieren. Basierend auf der Antwort von @ TaylorOtwell hier verarbeite ich auf diese Weise eingehende $ _GET-Anforderungen und ändere / manipuliere jedes Element.
Angenommen, die URL lautet: http://domain.com/category/page.php?a=b&x=y Und ich möchte nur einen Parameter zum Sortieren: entweder? Desc = Spaltenname oder? Asc = Spaltenname. Auf diese Weise reicht ein einziger URL-Parameter aus, um gleichzeitig zu sortieren und zu bestellen. Die URL lautet also http://domain.com/category/page.php?a=b&x=y&desc=column_name, wenn Sie zum ersten Mal auf die zugehörige Tabellenkopfzeile klicken.
Dann habe ich Tabellenzeilenüberschriften, die ich beim ersten Klick nach DESC und beim zweiten Klick nach ASC sortieren möchte. (Jeder erste Klick sollte zuerst "ORDER BY column DESC" sein.) Wenn keine Sortierung erfolgt, wird standardmäßig nach "date then id" sortiert.
Sie können es weiter verbessern, indem Sie jeder $ _GET-Komponente Reinigungs- / Filterfunktionen hinzufügen, aber die folgende Struktur legt den Grundstein.
(Sie können $ _SERVER [SCRIPT_URI] für eine vollständige URL verwenden, die mit http://domain.com beginnt. )
Dann verwende ich den resultierenden $ ORDER, den ich oben in der MySQL-Abfrage erhalte:
Nun die Funktion, die URL zu überprüfen, wenn es eine vorherige Sortierung gibt, und der URL einen Sortier- (und Ordnungs-) Parameter mit "?" oder "&" entsprechend der Reihenfolge:
Schließlich der Tabellenzeilenkopf, um die Funktion zu verwenden:
Zusammenfassung: Hiermit wird die URL gelesen, jede der $ _GET-Komponenten geändert und die endgültige URL mit Parametern Ihrer Wahl mit der korrekten Verwendungsform von "?" und "&"
quelle
quelle
eine weitere verbesserte Funktionsversion. Mischung aus vorhandenen Antworten mit kleinen Verbesserungen (Port-Unterstützung) und Bugfixes (ordnungsgemäße Überprüfung der Schlüssel).
quelle
Versuchen Sie diese Funktion, um URL-Parameter hinzuzufügen .
Anschließend können Sie den Link deaktivieren, wenn der Parameter so eingestellt ist, dass kein Duplikat des URL-Parameters vorhanden ist.
quelle
Wenn Sie WordPress verwenden, können Sie einfach verwenden
Dokumente https://developer.wordpress.org/reference/functions/add_query_arg/
quelle