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

197

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

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

etc.

Comment puis-je obtenir uniquement le emailparamètre de ces URL / valeurs?

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

Asim Zaidi
la source
Je suis un peu confus, veuillez élaborer le Q ...
Dexter Huinda
Dites-vous / demandez-vous que les URL soient traitées comme des chaînes?
hjpotter92
Si vous souhaitez "faire correspondre" la partie e-mail à partir de chaînes, comme dans vos exemples, utilisez des expressions régulières. Pourrait être aussi simple que /(email=\w\@\w\.\w)/des techniques d'appariement plus avancées. Je vous donne juste l'idée. Voir la preg_matchfonction: php.net/manual/en/function.preg-match.php
Dexter Huinda
Copie

Réponses:

414

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

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

Si vous voulez obtenir $urldynamiquement avec PHP, jetez un œil à cette question:

Obtenez l'URL complète en PHP

Ruel
la source
2
son fonctionnement mais j'obtiens une erreur dans les journaux comme celui-ci: Avis de PHP: Index non défini: requête
Srinivas08
112

Tous les paramètres après ?peuvent être consultés en utilisant un $_GETtableau. Alors,

echo $_GET['email'];

va extraire les e-mails des URL.

hjpotter92
la source
50
Ce n'est pas la réponse à la question, mais c'est la réponse que je cherchais quand j'ai posé la question aux Google, donc +1 pour répondre correctement à Google.
BillyNair
1
Ce n'est peut-être pas la réponse à la question, mais c'est la manière la plus correcte et la plus simple d'obtenir les paramètres d'URL - s'ils sont correctement définis: https://[email protected] $email = $_GET['email']; $email === '[email protected]';
CheddarMonkey
45

Utilisez les méthodes parse_url () et parse_str () . parse_url()analysera une chaîne URL dans un tableau associatif de ses parties. Étant donné que vous ne souhaitez qu'une seule partie de l'URL, vous pouvez utiliser un raccourci pour renvoyer une valeur de chaîne avec uniquement la partie souhaitée. Ensuite, parse_str()va créer des variables pour chacun des paramètres de la chaîne de requête. Je n'aime pas polluer le contexte actuel, donc 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 ) 
JCotton
la source
8

Utiliser $_GET['email']pour les paramètres dans l'URL. Utilisez $_POST['email']pour les données publiées dans le script. Ou utilisez _$REQUESTpour les deux. En outre, comme mentionné, vous pouvez utiliser une parse_url()fonction qui renvoie toutes les parties de l'URL. Utilisez une partie appelée «requête» - vous y trouverez votre paramètre de messagerie. Plus d'informations: http://php.net/manual/en/function.parse-url.php

Paul Denisevich
la source
5
OP a dit qu'il ne recevait pas d'URL address bar. Ces URL ne sont que des chaînes de INcode.
DavChana
7

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

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

Gulshan kumar
la source
3
L'OP a demandé d'extraire des variables d'une chaîne et non l'URL de la page en cours. parse_url () est la bonne réponse en supposant que la chaîne est correctement formatée.
Bloafer
6

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

parse_url()

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

L' parse_url()URL d'analyse et retourner ses composants que vous pouvez obtenir la chaîne de requête à l'aide de la queryclé. Ensuite, vous devez utiliser parse_str()cette chaîne de requête d'analyse et renvoyer des valeurs dans une 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 également effectuer ce travail en utilisant l' expression régulière .

preg_match()

Vous pouvez utiliser preg_match()pour obtenir la 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 sur une seule ligne!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
Mohammad
la source
3

J'ai créé une fonction à partir de la réponse @Ruel . Vous pouvez utiliser ceci:

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

mghhgm
la source
1
$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

Asesha George
la source
1
Pouvez-vous s'il vous plaît essayer d'élaborer davantage la réponse. Il est difficile d'obtenir ce que vous entendez par la réponse ci-dessus.
Mustafa Ehsan Alokozay
1
$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]
SHUBHAM SINGH
la source
1

Une réponse beaucoup plus sûre qui me surprend n'est pas encore mentionnée ici:

filter_input

Donc, dans le cas de la question, vous pouvez utiliser ceci pour obtenir une valeur de courrier électronique à partir des paramètres d'obtention d'URL:

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

Pour d'autres types de variables, vous voudriez choisir un filtre différent / approprié tel que FILTER_SANITIZE_STRING.

Je suppose que cette réponse fait plus qu'exactement ce que la question demande - obtenir les données brutes du paramètre URL. Mais ceci est un raccourci d'une ligne qui est le même résultat que celui-ci:

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

Autant prendre l'habitude de saisir des variables de cette façon.

squarecandy
la source
whooops, je n'ai pas vu la dernière ligne des questions sur le fait de ne pas obtenir cela de l'URL ... laissant toujours cela ici au cas où cela serait utile à personne.
squarecandy
0

A Laravel, j'utilise:

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

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

Fonction dynamique qui analyse l'url de la chaîne et obtient la valeur du paramètre de requête passé dans l'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
}

Fonction d'appel pour obtenir le résultat

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

Pour obtenir les paramètres de la chaîne URL, j'ai utilisé la fonction suivante.

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

S'il existe de nombreuses chaînes d'URL, vous pouvez utiliser la boucle pour obtenir le paramètre 'email' de toutes ces chaînes d'URL et les stocker dans un tableau.

Ravi Agrawal
la source
1
Je ne reçois pas ces chaînes de la barre d'adresse du navigateur, mais vous avez publié une solution pour cela
Mohammad
OP demandait des informations sur PHP, pas sur JavaScript
Jacob Alvarez