Ich benutze PHP, um die URL der aktuellen Seite zu erstellen. Manchmal URLs in Form von
www.mydomian.com/myurl.html?unwantedthngs
sind angefordert. Ich möchte das ?
und alles, was darauf folgt (Querystring) entfernen, so dass die resultierende URL wird:
www.mydomain.com/myurl.html
Mein aktueller Code lautet:
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" .
$_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
?>
php
query-string
Navi Gamage
quelle
quelle
Antworten:
Sie können verwenden
strtok
, um Zeichenfolge vor dem ersten Auftreten von abzurufen?
strtok()
stellt die prägnanteste Technik dar, um den Teilstring direkt vor dem?
im Querystring zu extrahieren.explode()
ist weniger direkt, da es ein Array mit möglicherweise zwei Elementen erzeugen muss, über das auf das erste Element zugegriffen werden muss.Einige andere Techniken können brechen, wenn der Querystring fehlt, oder möglicherweise andere / unbeabsichtigte Teilzeichenfolgen in der URL mutieren - diese Techniken sollten vermieden werden.
Eine Demonstration :
Ausgabe:
quelle
array_shift(explode('?',$_SERVER["REQUEST_URI"]))
?
nicht vorhanden ist.Verwenden Sie das PHP-Handbuch - parse_url () , um die benötigten Teile zu erhalten.
Bearbeiten (Beispiel für die Verwendung von @Navi Gamage)
Sie können es so verwenden:
Bearbeiten (zweites vollständiges Beispiel):
Die Funktion wurde aktualisiert, um sicherzustellen, dass das Schema angehängt wird und keine Benachrichtigungsnachrichten angezeigt werden:
Wird zurückkehren:
Dies ist die Ausgabe der Übergabe von Beispiel-URLs durch parse_url () ohne zweiten Parameter (nur zur Erläuterung).
Und dies ist die endgültige Ausgabe nach dem Erstellen der URL mit:
Ausgabe:
quelle
beste Lösung:
Sie müssen Ihr http://domain.com nicht in Ihr Verzeichnis aufnehmen, wenn Sie ein Formular an dieselbe Domain senden.
quelle
quelle
code
<? PHP-Funktion curPageURL () {$ pageURL = 'http'; if ($ _SERVER ["HTTPS"] == "on") {$ pageURL. = "s";} $ pageURL. = ": //"; if ($ _SERVER ["SERVER_PORT"]! = "80") {$ pageURL. = $ _SERVER ["SERVER_NAME"]. ":". $ _ SERVER ["SERVER_PORT"]. $ _ SERVER ["REQUEST_URI"]; } else {$ pageURL. = $ _SERVER ["SERVER_NAME"]. $ _ SERVER ["REQUEST_URI"]; $ pageURL = substr ($ pageURL, 0, strrpos ($ pageURL, "?")); } return $ pageURL; }?>code
Einfachster Weg
quelle
Sie benötigen mindestens PHP Version 5.4, um diese Lösung zu implementieren, ohne in einer Variablen in einer Zeile zu explodieren und in der nächsten zu verketten. Ein einfacher Einzeiler wäre jedoch:
Server Variablen: http://php.net/manual/en/reserved.variables.server.php
Array Dereferenzieren: https://wiki.php.net/rfc/functionarraydereferencing
quelle
Sie können die eingebaute Funktion parse_url folgendermaßen verwenden:
quelle
Du kannst es versuchen:
quelle
Wenn Sie einen Anforderungspfad erhalten möchten ( weitere Informationen ):
Wenn Sie die Abfrage entfernen möchten und (und möglicherweise auch fragmentieren):
quelle
Ersetzen Sie die Abfragezeichenfolge durch eine leere Zeichenfolge, um die Abfragezeichenfolge aus dem Anforderungs-URI zu entfernen:
quelle
www.example.com/myurl.html?
.Da ich sowohl mit relativen als auch mit absoluten URLs zu tun habe, habe ich die Lösung von veritas wie den folgenden Code aktualisiert.
Sie können es hier versuchen: https://ideone.com/PvpZ4J
quelle
könnte auch folgende gemäß dem PHP-Handbuch Kommentar verwenden
Bitte beachten Sie, dass dies nur für bestimmte PHP-Umgebungen funktioniert, und folgen Sie dem nachstehenden Kommentar auf dieser Seite, um weitere Informationen zu erhalten.
quelle
Versuche dies
quelle
Angenommen, Sie möchten die URL weiterhin ohne die Abfrageargumente abrufen (falls diese nicht festgelegt sind), verwenden Sie einfach eine kurze if-Anweisung, um Folgendes zu überprüfen
strpos
:quelle
Hier ist eine einfache Lösung, wenn Sie Laravel verwenden:
quelle
Versuche dies:
oder
quelle