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

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.

Asim Zaidi
fonte
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

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

hjpotter92
fonte
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://[email protected] $email = $_GET['email']; $email === '[email protected]';
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/[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
fonte
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

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

Gulshan kumar
fonte
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 protected]";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // [email protected]

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]; // [email protected]

preg_replace()

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

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
Mohammad
fonte
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 protected]";
echo get_valueFromStringUrl($url , "email");

Graças a @Ruel

mghhgm
fonte
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

Asesha George
fonte
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 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
fonte
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.

squarecandy
fonte
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;
}
Ronald Araújo
fonte
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
Bhargav Kaklotara
fonte
-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.

Ravi Agrawal
fonte
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