Używam PHP do zbudowania adresu URL bieżącej strony. Czasami adresy URL w postaci
www.mydomian.com/myurl.html?unwantedthngs
są wymagane. Chcę usunąć ?
i wszystko, co następuje po nim (kwerenda), tak aby wynikowy adres URL stał się:
www.mydomain.com/myurl.html
Mój obecny kod to:
<?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
źródło
źródło
Odpowiedzi:
Możesz użyć,
strtok
aby uzyskać ciąg przed pierwszym wystąpieniem?
strtok()
reprezentuje najbardziej zwięzłą technikę bezpośredniego wyciągania podłańcucha przed?
kwerendą.explode()
jest mniej bezpośredni, ponieważ musi wytworzyć potencjalnie dwuelementową tablicę, za pomocą której należy uzyskać dostęp do pierwszego elementu.Niektóre inne techniki mogą się zepsuć, gdy brakuje kwerendy lub potencjalnie mutować inne / niezamierzone podciągi w adresie URL - technik tych należy unikać.
demonstracja :
Wynik:
źródło
array_shift(explode('?',$_SERVER["REQUEST_URI"]))
?
nie jest obecny.Użyj PHP Manual - parse_url (), aby uzyskać potrzebne części.
Edytuj (przykładowe użycie @Navi Gamage)
Możesz użyć tego w następujący sposób:
Edycja (drugi pełny przykład):
Zaktualizowana funkcja, aby upewnić się, że schemat zostanie dołączony i nie pojawią się żadne powiadomienia:
Wróci:
To jest wynik z przekazywania przykładowych adresów URL przez parse_url () bez drugiego parametru (tylko dla wyjaśnienia).
I to jest końcowy wynik po zbudowaniu adresu URL przy użyciu:
Wynik:
źródło
najlepsze rozwiązanie:
Jeśli przesyłasz formularz do tej samej domeny, nie musisz dołączać do niego swojej http://domain.com .
źródło
źródło
code
<? Funkcja php 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
Najłatwiejszy sposób
źródło
Będziesz potrzebował co najmniej PHP w wersji 5.4, aby wdrożyć to rozwiązanie bez eksplozji w zmienną w jednym wierszu i konkatenacji w następnym, ale prostym linkiem byłoby:
Zmienne serwera: http://php.net/manual/en/reserved.variables.server.php
Dereferencje tablic: https://wiki.php.net/rfc/functionarraydereferencing
źródło
Możesz użyć wbudowanej funkcji parse_url w następujący sposób:
źródło
Możesz spróbować:
źródło
Jeśli chcesz uzyskać ścieżkę zapytania ( więcej informacji ):
Jeśli chcesz usunąć zapytanie i (a może także fragment):
źródło
Aby usunąć ciąg zapytania z identyfikatora URI żądania, zastąp ciąg zapytania pustym ciągiem:
źródło
www.example.com/myurl.html?
.Ponieważ mam do czynienia zarówno z względnymi, jak i bezwzględnymi adresami URL, zaktualizowałem rozwiązanie Veritas, takie jak poniższy kod.
Możesz spróbować tutaj: https://ideone.com/PvpZ4J
źródło
może również użyć następujących zgodnie z komentarzem ręcznym php
Pamiętaj, że działa to tylko w niektórych środowiskach PHP i postępuj zgodnie z poniższym komentarzem z tej strony, aby uzyskać więcej informacji;
źródło
Spróbuj tego
źródło
Zakładając, że nadal chcesz uzyskać adres URL bez argumentów zapytania (jeśli nie są ustawione), po prostu użyj skróconej instrukcji if, aby sprawdzić za pomocą
strpos
:źródło
Oto proste rozwiązanie, jeśli używasz Laravel:
źródło
Spróbuj tego:
lub
źródło