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.