web-dev-qa-db-fra.com

Comment obtenir les paramètres d'une chaîne d'URL?

J'ai un champ de formulaire HTML $_POST["url"] ayant des chaînes d'URL comme valeur . Les valeurs d'exemple sont:

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

etc.

Comment obtenir uniquement le paramètre email à partir de ces URL/valeurs?

Veuillez noter que je ne reçois pas ces chaînes de la barre d'adresse du navigateur.

149
Autolycus

Vous pouvez utiliser la parse_url() et la parse_str() pour cela.

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

Si vous voulez obtenir le $url de manière dynamique avec PHP, jetez un oeil à cette question: 

Récupère l'URL complète dans PHP

332
Ruel

Tous les paramètres après ? sont accessibles via le tableau $_GET. Alors,

echo $_GET['email'];

va extraire les emails des urls.

94
hjpotter92

Utilisez les méthodes parse_url () et parse_str () . parse_url() analysera une chaîne URL dans un tableau associatif de ses parties. Comme vous ne voulez qu'une partie de l'URL, vous pouvez utiliser un raccourci pour renvoyer une valeur de chaîne contenant uniquement la partie souhaitée. Ensuite, parse_str() créera des variables pour chacun des paramètres de la chaîne de requête. Je n'aime pas polluer le contexte actuel, alors fournir un deuxième paramètre place toutes les variables dans un tableau associatif.

$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 ) 
36
JCotton

Utilisez $_GET['email'] pour les paramètres dans l'URL . Utilisez $_POST['email'] pour les données envoyées au script . Ou utilisez _$REQUEST pour les deux . De plus, comme indiqué, vous pouvez utiliser la fonction parse_url() qui renvoie toutes les parties de l'URL. Utilisez une partie appelée "requête" - vous pouvez y trouver votre paramètre email. Plus d'infos: http://php.net/manual/en/function.parse-url.php

9
Paul Denisevich

vous pouvez utiliser le code ci-dessous pour obtenir l'adresse e-mail après? dans l'URL

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

5
Gulshan kumar

J'ai créé la fonction à partir de @Ruel answer . Vous pouvez l'utiliser:

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

Exemple:

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

Merci à @Ruel

3
mghhgm

Vous pouvez obtenir les paramètres de l'URL comme ceci: 

email = $_GET["email"];

.. ou comme ceci:

$url = $_SERVER["REQUEST_URI"];
$email = str_replace("/path/to/file.php?email=", "", $url);

Exemples de chemin d'accès au fichier:

si l'url ressemble à ceci:

https://example.com/file.php

alors le chemin d'accès au fichier est:

/file.php (+ parameter to get. Example: ?email=)
3
LeoM2G
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

Cela fonctionne très bien pour moi en utilisant php

1
Asesha George

Comme mentionné dans une autre réponse, la meilleure solution consiste à utiliser 

parse_url()

Vous devez utiliser une combinaison de parse_url() et parse_str() .

L'URL d'analyse parse_url() et renvoie ses composants que vous pouvez obtenir avec une chaîne de requête à l'aide de la clé query. Ensuite, vous devez utiliser parse_str() qui analyse la chaîne de requête et renvoyer Values ​​dans variable.

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

Vous pouvez aussi faire ce travail en utilisant regex

preg_match()

Vous pouvez utiliser preg_match() pour obtenir une valeur spécifique de la chaîne de requête à partir de l'URL.

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

preg_replace()

Vous pouvez également utiliser preg_replace() pour effectuer ce travail dans une ligne!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
0
Mohammad
$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]
0
SHUBHAM SINGH

À Laravel, je me sers de:

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

    return isset($result[$key]) ? $result[$key] : null;
}
0
Ronald Araújo