Wie erhalte ich Parameter aus einer URL-Zeichenfolge?

197

Ich habe ein HTML-Formularfeld $_POST["url"]mit einigen URL-Zeichenfolgen als Wert. Beispielwerte sind:

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]

etc.

Wie kann ich nur den emailParameter von diesen URLs / Werten erhalten?

Bitte beachten Sie, dass ich diese Zeichenfolgen nicht über die Adressleiste des Browsers erhalte.

Asim Zaidi
quelle
Ich bin ein wenig verwirrt, bitte erläutern Sie die Q ...
Dexter Huinda
Wollen / fordern Sie, dass die URLs als Zeichenfolgen behandelt werden?
hjpotter92
Wenn Sie den E-Mail-Teil wie in Ihren Beispielen aus Zeichenfolgen "abgleichen" möchten, verwenden Sie reguläre Ausdrücke. Könnte so einfach wie /(email=\w\@\w\.\w)/oder fortgeschrittenere Matching-Techniken sein. Ich gebe dir nur die Idee. Siehe preg_matchFunktion: php.net/manual/en/function.preg-match.php
Dexter Huinda
Mögliches Duplikat der URL-
Abfragezeichenfolge abrufen

Antworten:

414

Sie können das parse_url()und parse_str()dafür verwenden.

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

Wenn Sie das $urldynamisch mit PHP erhalten möchten, werfen Sie einen Blick auf diese Frage:

Holen Sie sich die vollständige URL in PHP

Ruel
quelle
2
Es funktioniert, aber ich erhalte eine Fehlermeldung in Protokollen wie diesen: PHP Hinweis: Undefinierter Index: Abfrage
Srinivas08
111

Auf alle Parameter danach ?kann mit einem $_GETArray zugegriffen werden . So,

echo $_GET['email'];

extrahiert die E-Mails aus URLs.

hjpotter92
quelle
49
Dies ist nicht die Antwort auf die Frage, aber dies ist die Antwort, nach der ich gesucht habe, als ich die Googles nach der Frage gefragt habe, also +1 für die korrekte Beantwortung von Google.
BillyNair
1
Dies ist möglicherweise nicht die Antwort auf die Frage, aber der richtige und einfachste Weg, um URL-Parameter zu erhalten - wenn sie richtig eingestellt sind: https://[email protected] $email = $_GET['email']; $email === '[email protected]';
CheddarMonkey
45

Verwenden Sie die Methoden parse_url () und parse_str () . parse_url()analysiert eine URL-Zeichenfolge in ein assoziatives Array seiner Teile. Da Sie nur einen einzelnen Teil der URL möchten, können Sie eine Verknüpfung verwenden, um einen Zeichenfolgenwert mit nur dem gewünschten Teil zurückzugeben. Als Nächstes parse_str()werden Variablen für jeden der Parameter in der Abfragezeichenfolge erstellt. Ich mag es nicht, den aktuellen Kontext zu verschmutzen. Wenn Sie also einen zweiten Parameter angeben, werden alle Variablen in einem assoziativen Array zusammengefasst.

$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
quelle
8

Verwendung $_GET['email']für Parameter in der URL. Verwendung $_POST['email']für gesendete Daten zum Skript. Oder _$REQUESTfür beide verwenden. Wie bereits erwähnt, können Sie auch eine parse_url()Funktion verwenden, die alle Teile der URL zurückgibt. Verwenden Sie einen Teil namens "Abfrage" - dort finden Sie Ihren E-Mail-Parameter. Weitere Informationen: http://php.net/manual/en/function.parse-url.php

Paul Denisevich
quelle
5
OP sagte, er bekomme keine URLs von address bar. Diese URLs sind nur Zeichenfolgen INdes Codes.
DavChana
7

Sie können den folgenden Code verwenden, um die E-Mail-Adresse nach zu erhalten? in der URL

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

Gulshan Kumar
quelle
3
Das OP forderte das Extrahieren von Variablen aus einer Zeichenfolge an, nicht der URL auf der aktuellen Seite. parse_url () ist die richtige Antwort, vorausgesetzt, die Zeichenfolge ist korrekt formatiert.
Bloafer
6

Wie in anderen Antworten erwähnt, ist die beste Lösung die Verwendung

parse_url()

Sie müssen die Kombination von parse_url()und verwendenparse_str() .

Die parse_url()Analyse-URL und geben ihre Komponenten zurück, die Sie mit dem querySchlüssel abfragen können . Dann sollten Sie parse_str()diese Analyse-Abfragezeichenfolge verwenden und Werte in Variablen zurückgeben.

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

Sie können diese Arbeit auch mit Regex ausführen .

preg_match()

Sie können verwenden preg_match(), um einen bestimmten Wert der Abfragezeichenfolge von der URL abzurufen.

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

preg_replace()

Sie können preg_replace()diese Arbeit auch in einer Zeile ausführen!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
Mohammad
quelle
3

Ich habe eine Funktion aus @Ruel Antwort erstellt . Sie können dies verwenden:

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;
    }
}

Beispiel:

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

Danke an @Ruel

mghhgm
quelle
1
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

Dies funktioniert gut für mich mit PHP

Asesha George
quelle
1
Können Sie bitte versuchen, die Antwort näher zu erläutern? Es ist schwer zu verstehen, was Sie mit der obigen Antwort meinen.
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
quelle
1

Eine viel sicherere Antwort, die mich überrascht, wird hier noch nicht erwähnt:

filter_input

Im Fall der Frage können Sie dies verwenden, um einen E-Mail-Wert von den URL-Abrufparametern abzurufen:

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

Für andere Variablentypen möchten Sie einen anderen / geeigneten Filter auswählen, z FILTER_SANITIZE_STRING.

Ich nehme an, diese Antwort macht mehr als genau das, was die Frage verlangt - das Abrufen der Rohdaten aus dem URL-Parameter. Dies ist jedoch eine einzeilige Verknüpfung, die das gleiche Ergebnis wie das folgende ergibt:

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

Könnte sich auch angewöhnen, auf diese Weise Variablen zu erfassen.

squarecandy
quelle
whooops, ich habe die letzte Zeile der Fragen nicht gesehen, ob ich das nicht von der URL bekommen soll ... ich lasse das immer noch hier, falls es für jemanden hilfreich ist.
Squarecandy
0

In Laravel verwende ich:

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
quelle
0

Dynamische Funktion, die die Zeichenfolgen-URL analysiert und den Wert des in der URL übergebenen Abfrageparameters abruft

 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
 }

Rufen Sie Function auf, um das Ergebnis zu erhalten

 echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here
Bhargav Kaklotara
quelle
Danke @ m02ph3u5 für die Aufmerksamkeit Aufmerksamkeit wurde hinzugefügt
Bhargav Kaklotara
-3

Um Parameter aus der URL-Zeichenfolge abzurufen, habe ich die folgende Funktion verwendet.

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');

Wenn es viele URL-Zeichenfolgen gibt, können Sie die Schleife verwenden, um den Parameter 'email' von all diesen URL-Zeichenfolgen abzurufen und im Array zu speichern.

Ravi Agrawal
quelle
1
Ich erhalte diese Zeichenfolgen nicht aus der Adressleiste des Browsers, aber Sie haben eine Lösung dafür veröffentlicht
Mohammad
OP fragte nach PHP, nicht nach JavaScript
Jacob Alvarez