URL 문자열에서 매개 변수를 얻는 방법?


199

$_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를 자세히 설명해주세요.
Dexter Huinda

URL을 문자열로 취급하도록 말하고 요청합니까?
hjpotter92

예와 같이 문자열에서 전자 메일 부분을 "일치"시키려면 정규식을 사용하십시오. /(email=\w\@\w\.\w)/고급 매칭 기술 만큼이나 간단 할 수 있습니다 . 그냥 당신에게 아이디어를 제공합니다. preg_match기능 참조 : php.net/manual/en/function.preg-match.php
Dexter Huinda


답변:


415

당신은 사용할 수 있습니다 parse_url()parse_str()그것을 위해를.

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

$urlPHP를 사용 하여 동적으로 가져 오려면 이 질문을 살펴보십시오.

PHP에서 전체 URL을 얻으십시오


2
그것의 작동하지만 다음과 같은 로그에 오류가 발생합니다 : PHP Notice : 정의되지 않은 인덱스 : query
Srinivas08

113

이후의 모든 매개 변수 ?$_GET배열을 사용하여 액세스 할 수 있습니다 . 그래서,

echo $_GET['email'];

URL에서 이메일을 추출합니다.


50
이것은 질문에 대한 답변이 아니지만 Google에 질문을 할 때 내가 찾은 답변이므로 Google에 올바르게 대답하기 위해 +1입니다.
BillyNair

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()쿼리 문자열의 각 매개 변수에 대한 변수를 만듭니다. 현재 컨텍스트를 오염시키는 것을 좋아하지 않으므로 두 번째 매개 변수를 제공하면 모든 변수가 연관 배열에 저장됩니다.

$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의 모든 부분을 반환 하는 함수를 사용할 수 있습니다 . 'query'라는 부분을 사용하십시오-전자 메일 매개 변수를 찾을 수 있습니다. 추가 정보 : http://php.net/manual/en/function.parse-url.php


5
OP는에서 URL을받지 못한다고 말했다 address bar. 이 URL은 IN코드를 나타내는 문자열 입니다.
DavChana

7

아래 코드를 사용하여 이메일 주소를 얻을 수 있습니까? URL에서

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


3
OP가 현재 페이지의 URL이 아닌 문자열에서 변수 추출을 요청했습니다. parse_url ()은 문자열의 형식이 올바른 것으로 가정하면 정답입니다.
Bloafer

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() 에이 작업을 수행 하는 데 사용할 수 있습니다 !

$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 get 매개 변수에서 전자 메일 값을 얻는 데 사용할 수 있습니다.

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

다른 유형의 변수의 경우 와 같이 다른 / 적절한 필터선택 하려고합니다 FILTER_SANITIZE_STRING.

이 답변이 질문에서 요구하는 것 이상을 수행한다고 가정합니다 .URL 매개 변수에서 원시 데이터를 가져옵니다. 그러나 이것은 한 줄 바로 가기이며 다음과 같은 결과입니다.

$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 문자열이 많은 경우 loop를 사용하여 모든 해당 URL 문자열에서 'email'매개 변수를 가져 와서 배열에 저장할 수 있습니다.


1
브라우저 주소 표시 줄 에서이 문자열을 얻지 못했지만 해결책을 게시했습니다.
Mohammad

OP는 JavaScript가 아닌 PHP에 대해 질문했습니다
Jacob Alvarez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.