257 votes

Comment obtenir des paramètres à partir d'une chaîne d'URL ?

J'ai un champ de formulaire HTML $_POST["url"] dont la valeur est une chaîne d'URL.

Voici quelques exemples de valeurs :

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.

Comment puis-je obtenir uniquement les email à partir de ces URL/valeurs ?

Veuillez noter que je n'obtiens pas ces chaînes dans la barre d'adresse du navigateur.

516voto

Ruel Points 6140

Vous pouvez utiliser le parse_url() y parse_str() pour cela.

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

Si vous souhaitez obtenir le $url dynamiquement avec PHP, jetez un coup d'œil à cette question :

Obtenir l'URL complète en PHP

144voto

hjpotter92 Points 24797

Tous les paramètres après ? est accessible par l'intermédiaire de $_GET de la gamme. Ainsi,

echo $_GET['email'];

permet d'extraire les courriels des urls.

53voto

JCotton Points 4256

Utiliser le parse_url() y parse_str() des méthodes. parse_url() analyse une chaîne d'URL en un tableau associatif de ses parties. Comme vous ne voulez qu'une seule partie de l'URL, vous pouvez utiliser un raccourci pour renvoyer une chaîne de caractères contenant uniquement la partie souhaitée. Suivant, 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, c'est pourquoi le fait de fournir un second paramètre place toutes les variables dans un tableau associatif.

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

15voto

Mohammad Points 10538

Comme indiqué dans une autre réponse, la meilleure solution consiste à utiliser parse_url() .

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

En parse_url() analyse l'URL et renvoie ses composants. Vous pouvez obtenir la chaîne de requête à l'aide de la fonction query clé. Vous devez ensuite utiliser parse_str() qui analyse la chaîne de requête et renvoie dans une variable.

$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

Vous pouvez également effectuer ce travail en utilisant expressions rationnelles : preg_match()

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

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

preg_replace()

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

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

7voto

Paul Denisevich Points 1779

Utilisation $_GET['email'] pour les paramètres de l'URL. Utiliser $_POST['email'] pour les données postées dans script. Ou utilisez _$REQUEST pour les deux. En outre, comme indiqué, vous pouvez utiliser parse_url() qui renvoie toutes les parties de l'URL. Utilisez la partie appelée "query" - c'est là que vous trouverez le paramètre de votre courrier électronique. Plus d'informations : http://php.net/manual/en/function.parse-url.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X