Como obter parâmetros de uma string de URL?


197

Eu tenho um campo de formulário HTML $_POST["url"]com algumas seqüências de URL como o valor. Os valores de exemplo são:

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.

Como posso obter apenas o emailparâmetro desses URLs / valores?

Observe que não estou recebendo essas seqüências de caracteres na barra de endereços do navegador.


Estou um pouco confuso, por favor, descreva o Q ...
Dexter Huinda

Você está dizendo / solicitando que os URLs sejam tratados como strings?
Hjpotter92

Se você deseja "corresponder" a parte do email a partir de strings, como nos seus exemplos, use expressões regulares. Pode ser tão simples quanto /(email=\w\@\w\.\w)/ou mais avançadas técnicas de correspondência. Apenas dando a você a ideia. Veja preg_matchfunção: php.net/manual/en/function.preg-match.php
Dexter Huinda


Possível duplicata da string de consulta Get URL
jww 21/10

Respostas:


414

Você pode usar o parse_url()e parse_str()para isso.

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

Se você deseja obter o $urldinamicamente com PHP, dê uma olhada nesta pergunta:

Obter o URL completo em PHP


2
o seu trabalho, mas eu estou recebendo erro nos registros como este: PHP Notice: Undefined index: consulta
Srinivas08

112

Todos os parâmetros posteriores ?podem ser acessados ​​usando o $_GETarray. Assim,

echo $_GET['email'];

extrairá os e-mails dos URLs.


50
Essa não é a resposta para a pergunta, mas é a resposta que eu estava procurando quando perguntei aos Googles a pergunta, então +1 por responder ao Google corretamente.
23416 BillyNair

1
Isto pode não ser a resposta à pergunta, mas é a maneira correta e mais fácil de obter parâmetros de URL - se eles estão definidos corretamente: https://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
CheddarMonkey

45

Use os métodos parse_url () e parse_str () . parse_url()analisará uma string de URL em uma matriz associativa de suas partes. Como você deseja apenas uma parte da URL, é possível usar um atalho para retornar um valor de sequência com a parte desejada. Em seguida, parse_str()criará variáveis ​​para cada um dos parâmetros na string de consulta. Não gosto de poluir o contexto atual, portanto, fornecer um segundo parâmetro coloca todas as variáveis ​​em uma matriz associativa.

$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

Use $_GET['email']para parâmetros em URL. Use $_POST['email']para dados publicados no script. Ou use _$REQUESTpara ambos. Além disso, como mencionado, você pode usar a parse_url()função que retorna todas as partes da URL. Use uma parte chamada 'query' - lá você pode encontrar o seu parâmetro de email. Mais informações: http://php.net/manual/en/function.parse-url.php


5
OP disse que não está recebendo URLs address bar. Esses URLs são apenas strings INdo código.
21412 DavChana

7

você pode usar o código abaixo para obter o endereço de e-mail depois? no URL

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


3
O OP solicitou a extração de variáveis ​​de uma sequência e não da URL na página atual. parse_url () é a resposta correta, assumindo que a string esteja formatada corretamente.
Bloafer

6

Como mencionado em outra resposta, a melhor solução é usar

parse_url()

Você precisa usar a combinação de parse_url()e parse_str().

A parse_url()URL de análise e retorne seus componentes para que você possa obter a string de consulta usando a querychave. Em seguida, você deve usar parse_str()essa sequência de consultas de análise e retornar valores à variável.

$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

Além disso, você pode fazer esse trabalho usando o regex .

preg_match()

Você pode usar preg_match()para obter um valor específico da string de consulta do URL.

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

preg_replace()

Além disso, você pode usar preg_replace()para fazer este trabalho em uma linha!

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

3

Eu criei uma função a partir da resposta @Ruel . Você pode usar isto:

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

Exemplo:

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

Graças a @Ruel


1
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

Isso está funcionando muito bem para mim usando php


1
Você pode, por favor, tentar elaborar mais a resposta. É difícil entender o que você quer dizer com a resposta acima.
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

Uma resposta muito mais segura que estou surpresa ainda não foi mencionada aqui:

filter_input

Portanto, no caso da pergunta, você pode usar isso para obter um valor de email a partir dos parâmetros de obtenção de URL:

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

Para outros tipos de variáveis, você desejaria escolher um filtro diferente / apropriado , como FILTER_SANITIZE_STRING.

Suponho que essa resposta faça mais do que exatamente o que a pergunta pede - obtendo os dados brutos do parâmetro URL. Mas este é um atalho de uma linha com o mesmo resultado:

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

Poderia muito bem adquirir o hábito de pegar variáveis ​​dessa maneira.


Opa, não vi a última linha das perguntas sobre como não obter isso do URL ... ainda o deixa aqui, caso seja útil para alguém.
squarecandy 18/02

0

No Laravel, eu uso:

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

    return isset($result[$key]) ? $result[$key] : null;
}

0

Função dinâmica que analisa o URL da string e obtém o valor do parâmetro de consulta passado no 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
}

Função de chamada para obter resultado

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

-3

Para obter parâmetros da string de URL, usei a seguinte função.

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

Se houver muitas cadeias de URL, você poderá usar o loop para obter o parâmetro 'email' de todas essas cadeias de URL e armazená-las na matriz.


1
Eu não estou recebendo essas seqüências de caracteres da barra de endereços do navegador, mas você postou a solução para ele #
Mohammad

OP foi perguntando sobre PHP, não JavaScript
Jacob Alvarez
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.