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/1234?email=xyz@test.com
https://example.com/test/1234?basic=2&email=xyz2@test.com
https://example.com/test/1234?email=xyz3@test.com
https://example.com/test/1234?email=xyz4@test.com&testin=123
https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com

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.


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:



111

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

echo $_GET['email'];

extrahiert die E-Mails aus URLs.


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://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
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/1234?email=xyz4@test.com&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);

//Output: Array ( [email] => xyz4@test.com [testin] => 123 ) 

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


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


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=xyz2@test.com";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // xyz2@test.com

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]; // xyz2@test.com

preg_replace()

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

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// xyz2@test.com

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=xyz5@test.com";
echo get_valueFromStringUrl($url , "email");

Danke an @Ruel


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


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=singh@gmail.com';
$query = parse_url($web_url, PHP_URL_QUERY);
parse_str($query, $queryArray);

echo "Name: " . $queryArray['name'];  // Result: shubham
echo "EMail: " . $queryArray['email']; // Result:singh@gmail.com

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.


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

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.