URL文字列からパラメーターを取得する方法は?


197

$_POST["url"]値としていくつかのURL文字列を持つHTMLフォームフィールドがあります。値の例は次のとおりです。

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

emailこれらのURL /値からパラメーターのみを取得するにはどうすればよいですか?

ブラウザのアドレスバーからこれらの文字列を取得していないことに注意してください。


私は少し混乱しています、Qを詳しく説明してください...
デクスターHuinda

URLを文字列として処理するように言っていますか?
hjpotter92

例のように、文字列から電子メール部分を「照合」する場合は、正規表現を使用します。シンプルな、/(email=\w\@\w\.\w)/またはより高度なマッチングテクニックを使用できます。ただあなたにアイデアを与えます。preg_match関数を参照してください:php.net/manual/en/function.preg-match.php
デクスターHuinda '14 / 07/14


回答:


414

あなたは使用することができますparse_url()し、parse_str()そのため。

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

$urlPHPで動的に取得したい場合は、次の質問をご覧ください。

PHPで完全なURLを取得する


2
その動作しますが、次のようなログでエラーが発生します:PHP通知:未定義のインデックス:クエリ
Srinivas08

112

後のすべてのパラメーターは、配列?を使用してアクセスできます$_GET。そう、

echo $_GET['email'];

URLからメールを抽出します。


50
これは質問に対する答えではありませんが、Googleに質問をしたときに探していた答えなので、Googleに正しく答えるために+1します。
BillyNair 2016

1
これは、質問への答えであるが、URLパラメータを取得するための正しいと最も簡単な方法であるかもしれない-それらが正しく設定されている場合: https://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
CheddarMonkey

45

使用する場合でもparse_url()parse_str()メソッドを。parse_url()URL文字列を解析して、その部分の連想配列に変換します。URLの一部のみが必要なため、ショートカットを使用して、必要な部分のみを含む文字列値を返すことができます。次に、parse_str()クエリ文字列の各パラメータの変数を作成します。現在のコンテキストを汚染するのは好きではないので、2番目のパラメーターを指定すると、すべての変数が連想配列になります。

$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

$_GET['email']URLのパラメーターに使用します。$_POST['email']スクリプトに投稿されたデータに使用します。または_$REQUEST両方に使用します。また、前述のように、parse_url()URLのすべての部分を返す関数を使用できます。「クエリ」と呼ばれる部分を使用してください-あなたのメールパラメーターを見つけることができます。詳細:http : //php.net/manual/en/function.parse-url.php


5
OPは、からURLを取得していないと述べましたaddress bar。これらのURLはINコードの文字列です。
DavChana 2012

7

以下のコードを使用してメールアドレスを取得できますか?URL

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


3
OPは、現在のページのURLではなく文字列から変数を抽出するように要求しました。parse_url()は、文字列が正しくフォーマットされている場合の正しい答えです。
Bloafer 2016

6

他の回答で述べたように、最善の解決策は

parse_url()

parse_url()との組み合わせを使用する必要がありparse_str()ます。

parse_url()パースのURLと、使用してクエリ文字列を取得することができ、その構成要素を返すqueryキーを。次にparse_str()、その解析クエリ文字列を使用して、値を変数に返す必要があります。

$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

また、正規表現を使用してこの作業を行うことができます。

preg_match()

を使用preg_match()して、URLからクエリ文字列の特定の値を取得できます。

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

preg_replace()

また、preg_replace()この作業を1行で行うのにも使用できます

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

3

@Ruel answerから関数を作成しました。あなたはこれを使うことができます:

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

例:

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

@Ruelに感謝


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

これはphpを使用して私にとって素晴らしい仕事です


1
もう少し詳しく答えてください。上記の答えであなたが意味することを理解するのは難しいです。
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

私が驚いたはるかに安全な答えはまだここでは言及されていません:

filter_input

したがって、質問の場合、これを使用して、URL取得パラメーターから電子メールの値を取得できます。

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

他のタイプの変数については、などの別の/適切なフィルター選択する必要がありますFILTER_SANITIZE_STRING

この答えは、質問が要求するものを正確に超えていると思います-URLパラメータから生データを取得します。しかし、これは次と同じ結果になる1行のショートカットです。

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

この方法で変数を取得する習慣にも入るかもしれません。


whooops、URLからこれを取得しないことについての質問の最後の行は表示されませんでした...誰かに役立つ場合に備えて、これをここに残します。
squarecandy

0

Laravelでは、私は次のものを使用しています:

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

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

0

文字列のURLを解析し、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
}

関数を呼び出して結果を取得する

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

-3

URL文字列からパラメーターを取得するには、次の関数を使用しました。

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

多くのURL文字列がある場合は、ループを使用して、それらすべてのURL文字列からパラメーター 'email'を取得し、配列に格納できます。


1
ブラウザのアドレスバーからこれらの文字列を取得していませんが、解決策を投稿しました
Mohammad

OPは、JavaScriptではなくPHPについて尋ねていました
Jacob Alvarez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.