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.
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:
Tous les paramètres après ?
sont accessibles via le tableau $_GET
. Alors,
echo $_GET['email'];
va extraire les emails des urls.
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 )
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
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'];
}
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
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=)
$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
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]
$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]
À 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;
}