Come ottenere parametri da una stringa URL?


197

Ho un campo modulo HTML $_POST["url"]con alcune stringhe URL come valore. I valori di esempio sono:

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

eccetera.

Come posso ottenere solo il emailparametro da questi URL / valori?

Si noti che non sto ricevendo queste stringhe dalla barra degli indirizzi del browser.


Sono un po 'confuso, per favore elabora il Q ...
Dexter Huinda,

Stai dicendo / chiedendo che gli URL vengano trattati come stringhe?
hjpotter92,

Se vuoi "abbinare" la parte email dalle stringhe, come nei tuoi esempi, usa espressioni regolari. Potrebbe essere semplice /(email=\w\@\w\.\w)/o più avanzato tecniche di abbinamento. Ti sto solo dando l'idea. Vedere preg_matchla funzione: php.net/manual/en/function.preg-match.php
Dexter Huinda


Possibile duplicato della stringa di query Get URL
jww

Risposte:


414

Puoi usare il parse_url()e parse_str()per quello.

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

Se vuoi ottenere il $urldinamico con PHP, dai un'occhiata a questa domanda:

Ottieni l'URL completo in PHP


2
funziona ma sto ricevendo un errore in registri come questo: Avviso PHP: indice indefinito: query
Srinivas08

112

Tutti i parametri successivi ?sono accessibili tramite $_GETarray. Così,

echo $_GET['email'];

estrarrà le email dagli URL.


50
Questa non è la risposta alla domanda, ma questa è la risposta che stavo cercando quando ho fatto la domanda a Google, quindi +1 per aver risposto correttamente a Google.
BillyNair,

1
Questa potrebbe non essere la risposta alla domanda, ma è il modo più semplice e corretto per ottenere i parametri URL - se impostati correttamente: https://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
CheddarMonkey

45

Utilizzare i metodi parse_url () e parse_str () . parse_url()analizzerà una stringa URL in un array associativo delle sue parti. Poiché desideri solo una singola parte dell'URL, puoi utilizzare un collegamento per restituire un valore di stringa con solo la parte desiderata. Successivamente, parse_str()creerà variabili per ciascuno dei parametri nella stringa di query. Non mi piace inquinare il contesto attuale, quindi fornire un secondo parametro mette tutte le variabili in un array associativo.

$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

Utilizzare $_GET['email']per i parametri nell'URL. Utilizzare $_POST['email']per i dati pubblicati per lo script. O utilizzare _$REQUESTper entrambi. Inoltre, come detto, è possibile utilizzare la parse_url()funzione che restituisce tutte le parti dell'URL. Usa una parte chiamata 'query' - lì puoi trovare il tuo parametro email. Maggiori informazioni: http://php.net/manual/en/function.parse-url.php


5
OP ha dichiarato di non ricevere URL da address bar. Questi URL sono solo stringhe INdel codice.
DavChana,

7

puoi usare il codice qui sotto per ottenere l'indirizzo email dopo? nell'URL

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


3
L'OP ha richiesto l'estrazione di variabili da una stringa e non dall'URL nella pagina corrente. parse_url () è la risposta corretta supponendo che la stringa sia formattata correttamente.
Bloafer

6

Come menzionato in altre risposte, la migliore soluzione sta usando

parse_url()

È necessario utilizzare la combinazione di parse_url()e parse_str().

L' parse_url()URL di analisi e restituisce i suoi componenti che è possibile ottenere la stringa di query utilizzando la querychiave. Quindi è necessario utilizzare parse_str()quella stringa di query di analisi e restituire i valori in variabile.

$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

Inoltre puoi fare questo lavoro usando regex .

preg_match()

È possibile utilizzare preg_match()per ottenere il valore specifico della stringa di query dall'URL.

preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // xyz2@test.com

preg_replace()

Inoltre puoi usare preg_replace()questo lavoro in una riga!

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

3

Ho creato la funzione dalla risposta @Ruel . Puoi usare questo:

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

Esempio:

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

Grazie a @Ruel


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

Funziona benissimo per me usando php


1
Puoi per favore provare a elaborare di più la risposta. È difficile ottenere ciò che intendi con la risposta sopra.
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

Una risposta molto più sicura che mi sorprende non è ancora menzionata qui:

filter_input

Quindi nel caso della domanda puoi usarlo per ottenere un valore di email dall'URL ottenere parametri:

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

Per altri tipi di variabili, si desidera scegliere un filtro diverso / appropriato comeFILTER_SANITIZE_STRING .

Suppongo che questa risposta faccia più di esattamente quello che la domanda richiede: ottenere i dati grezzi dal parametro URL. Ma questo è un collegamento di una riga che ha lo stesso risultato di questo:

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

Potrebbe anche prendere l'abitudine di afferrare le variabili in questo modo.


whooops, non ho visto l'ultima riga delle domande sul non ottenerlo dall'URL ... lasciandolo qui nel caso sia utile a chiunque.
squarecandy,

0

In Laravel, sto usando:

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

    return isset($result[$key]) ? $result[$key] : null;
}

0

Funzione dinamica che analizza l'URL della stringa e ottiene il valore del parametro di query passato nell'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
}

Chiama la funzione per ottenere il risultato

echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here

-3

Per ottenere i parametri dalla stringa URL, ho usato la seguente funzione.

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

Se sono presenti molte stringhe URL, è possibile utilizzare il ciclo per ottenere il parametro "e-mail" da tutte quelle stringhe URL e memorizzarle nell'array.


1
Non sto ricevendo queste stringhe dalla barra degli indirizzi del browser, ma hai pubblicato la soluzione per questo
Mohammad

OP stava chiedendo informazioni su PHP, non su JavaScript
Jacob Alvarez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.