Jak uzyskać parametry z ciągu adresu URL?

197

Mam pole formularza HTML $_POST["url"]z pewnymi ciągami adresów URL jako wartością. Przykładowe wartości to:

https://example.com/test/[email protected]
https://example.com/test/1234?basic=2&[email protected]
https://example.com/test/[email protected]
https://example.com/test/[email protected]&testin=123
https://example.com/test/the-page-here/1234?someurl=key&[email protected]

itp.

Jak mogę uzyskać tylko emailparametr z tych adresów URL / wartości?

Pamiętaj, że nie otrzymuję tych ciągów z paska adresu przeglądarki.

Asim Zaidi
źródło
Jestem trochę zdezorientowany, proszę rozwinąć Q ...
Dexter Huinda
Czy mówisz / prosisz, aby adresy URL były traktowane jako ciągi znaków?
hjpotter92
Jeśli chcesz „dopasować” część e-maila z ciągów znaków, tak jak w twoich przykładach, użyj wyrażeń regularnych. Może być tak proste /(email=\w\@\w\.\w)/lub bardziej zaawansowane techniki dopasowywania. Po prostu daję ci pomysł. Patrz preg_matchfunkcja: php.net/manual/en/function.preg-match.php
Dexter Huinda
Możliwy duplikat ciągu zapytania Get URL
jww

Odpowiedzi:

414

Możesz użyć do tego parse_url()i parse_str().

$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];

Jeśli chcesz $urldynamicznie korzystać z PHP, spójrz na to pytanie:

Uzyskaj pełny adres URL w PHP

Ruel
źródło
2
działa, ale dostaję błąd w logach takich jak: Uwaga PHP: Niezdefiniowany indeks: zapytanie
Srinivas08
113

?Dostęp do wszystkich parametrów po można uzyskać za pomocą $_GETtablicy. Więc,

echo $_GET['email'];

wyodrębni e-maile z adresów URL.

hjpotter92
źródło
50
To nie jest odpowiedź na pytanie, ale jest to odpowiedź, której szukałem, kiedy poprosiłem Googles o pytanie, więc +1 za prawidłowe udzielenie odpowiedzi Google.
BillyNair,
1
To może nie być odpowiedź na pytanie, ale jest to poprawny i najłatwiejszy sposób na uzyskanie parametrów adresu URL - jeśli są ustawione poprawnie: https://[email protected] $email = $_GET['email']; $email === '[email protected]';
CheddarMonkey
45

Użyj metod parse_url () i parse_str () . parse_url()przeanalizuje ciąg adresu URL w tablicy asocjacyjnej jego części. Ponieważ potrzebujesz tylko jednej części adresu URL, możesz użyć skrótu, aby zwrócić wartość ciągu tylko z żądaną częścią. Następnie parse_str()utworzy zmienne dla każdego parametru w ciągu zapytania. Nie lubię zanieczyszczać bieżącego kontekstu, więc podanie drugiego parametru umieszcza wszystkie zmienne w tablicy asocjacyjnej.

$url = "https://mysite.com/test/[email protected]&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);

//Output: Array ( [email] => [email protected] [testin] => 123 ) 
JCotton
źródło
8

Użyj $_GET['email']dla parametrów w adresie URL. Użyj $_POST['email']do wysłania danych do skryptu. Lub użyj _$REQUESTdla obu. Ponadto, jak wspomniano, możesz użyć parse_url()funkcji, która zwraca wszystkie części adresu URL. Użyj części o nazwie „zapytanie” - tam możesz znaleźć swój parametr e-mail. Więcej informacji: http://php.net/manual/en/function.parse-url.php

Paul Denisevich
źródło
5
OP powiedział, że nie pobiera adresów URL address bar. Te adresy URL są po prostu ciągami INkodu.
DavChana,
7

możesz użyć poniższego kodu, aby później uzyskać adres e-mail? w adresie URL

<?php
if (isset($_GET['email'])) {
    echo $_GET['email'];
}

Gulshan Kumar
źródło
3
OP zażądał wyodrębnienia zmiennych z ciągu, a nie adresu URL na bieżącej stronie. parse_url () to poprawna odpowiedź przy założeniu, że łańcuch jest poprawnie sformatowany.
Bloafer
6

Jak wspomniano w innej odpowiedzi, najlepszym rozwiązaniem jest użycie

parse_url()

Musisz użyć kombinacji parse_url()iparse_str() .

parse_url()URL parse i zwraca jego składowe, które można uzyskać ciąg kwerendy przy użyciu queryklucza. Następnie należy użyć parse_str()tego ciągu zapytania analizy i zwrócić wartości do zmiennej.

$url = "https://example.com/test/1234?basic=2&[email protected]";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // [email protected]

Możesz także wykonać tę pracę za pomocą wyrażenia regularnego .

preg_match()

Możesz użyć, preg_match()aby uzyskać określoną wartość ciągu zapytania z adresu URL.

preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // [email protected]

preg_replace()

Możesz także użyć preg_replace()do wykonania tej pracy w jednym wierszu!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
Mohammad
źródło
3

Stworzyłem funkcję z odpowiedzi @Ruel . Możesz użyć tego:

function get_valueFromStringUrl($url , $parameter_name)
{
    $parts = parse_url($url);
    if(isset($parts['query']))
    {
        parse_str($parts['query'], $query);
        if(isset($query[$parameter_name]))
        {
            return $query[$parameter_name];
        }
        else
        {
            return null;
        }
    }
    else
    {
        return null;
    }
}

Przykład:

$url = "https://example.com/test/the-page-here/1234?someurl=key&[email protected]";
echo get_valueFromStringUrl($url , "email");

Dzięki @Ruel

mghhgm
źródło
1
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

Działa to świetnie dla mnie przy użyciu php

Asesha George
źródło
1
Czy możesz spróbować bardziej szczegółowo udzielić odpowiedzi. Trudno jest zrozumieć, co masz na myśli przez powyższą odpowiedź.
Mustafa Ehsan Alokozay
1
$web_url = 'http://www.writephponline.com?name=shubham&[email protected]';
$query = parse_url($web_url, PHP_URL_QUERY);
parse_str($query, $queryArray);

echo "Name: " . $queryArray['name'];  // Result: shubham
echo "EMail: " . $queryArray['email']; // Result:[email protected]
SHUBHAM SINGH
źródło
1

O wiele bardziej bezpieczna odpowiedź, która mnie dziwi, nie została jeszcze wspomniana:

filter_input

Więc w przypadku pytania możesz użyć tego, aby uzyskać wartość e-mail z adresu URL, pobierz parametry:

$email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );

W przypadku innych typów zmiennych chciałbyś wybrać inny / odpowiedni filtr, taki jakFILTER_SANITIZE_STRING .

Przypuszczam, że ta odpowiedź robi więcej niż dokładnie to, o co pyta pytanie - pobieranie surowych danych z parametru URL. Ale jest to jednowierszowy skrót, który daje taki sam wynik jak ten:

$email = $_GET['email'];
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );

Równie dobrze może nabrać zwyczaju chwytania zmiennych w ten sposób.

Squarecandy
źródło
Ups, nie widziałem ostatniego wiersza pytań o nieotrzymaniu tego z adresu URL ... nadal zostawiam to tutaj na wypadek, gdyby było to pomocne dla kogokolwiek.
squarecandy
0

W Laravel używam:

private function getValueFromString(string $string, string $key)
{
    parse_str(parse_url($string, PHP_URL_QUERY), $result);

    return isset($result[$key]) ? $result[$key] : null;
}
Ronald Araújo
źródło
0

Funkcja dynamiczna, która analizuje adres URL ciągu i pobiera wartość parametru zapytania przekazanego w adresie URL

function getParamFromUrl($url,$paramName){
  parse_str(parse_url($url,PHP_URL_QUERY),$op);// fetch query parameters from string and convert to associative array
  return array_key_exists($paramName,$op) ? $op[$paramName] : "Not Found"; // check key is exist in this array
}

Wywołaj funkcję, aby uzyskać wynik

echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here
Bhargav Kaklotara
źródło
-3

Aby uzyskać parametry z ciągu adresu URL, użyłem następującej funkcji.

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : sParameterName[1];
        }
    }
};
var email = getUrlParameter('email');

Jeśli istnieje wiele ciągów adresów URL, możesz użyć pętli, aby uzyskać parametr „email” ze wszystkich tych ciągów adresów URL i zapisać je w tablicy.

Ravi Agrawal
źródło
1
Nie otrzymuję tych ciągów z paska adresu przeglądarki, ale opublikowałeś rozwiązanie
Mohammad,
OP pytał o PHP, a nie JavaScript
Jacob Alvarez