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/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 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.


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


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


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.


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://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
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/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

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


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


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=xyz2@test.com";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // xyz2@test.com

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]; // xyz2@test.com

preg_replace()

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

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

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=xyz5@test.com";
echo get_valueFromStringUrl($url , "email");

Merci à @Ruel


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


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=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

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.


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

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

-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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.