programing

URL 쿼리 문자열 매개 변수 가져오기

itsource 2022. 10. 5. 23:43
반응형

URL 쿼리 문자열 매개 변수 가져오기

다음과 같은 형식의 URL 쿼리 문자열에서 매개 변수를 얻는 "필요한 코드 감소" 방법은 무엇입니까?

www.mysite.com/category/subcategory?myqueryhash

출력은 다음과 같습니다.myqueryhash

저는 이 접근방식을 알고 있습니다.

www.mysite.com/category/subcategory?q=myquery

<?php
   echo $_GET['q'];  //Output: myquery
?>

$_SERVER['QUERY_STRING']에, 찾고 있는 데이터가 기재되어 있습니다.


문서

이를 위한 PHP 방법은 parse_url 함수를 사용하는 것입니다.이 함수는 URL을 해석하고 해당 컴포넌트를 반환합니다.쿼리 문자열 포함.

예제:

$url = 'www.mysite.com/category/subcategory?myqueryhash';
echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"

자세한 내용은 여기를 참조하십시오.

함수parse_str()는 모든 쿼리 파라미터를 어레이로 자동으로 읽습니다.

예를 들어 URL이http://www.example.com/page.php?x=100&y=200, 코드

$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);

파라미터 값이 에 저장됩니다.$queries배열($queries['x']=100,$queries['y']=200).

parse_str 문서를 참조하십시오.


편집

PHP 설명서에 따르면parse_str()는 두 번째 파라미터(배열)에만 사용해야 합니다.사용.parse_str($_SERVER['QUERY_STRING'])이 URL에서 변수를 만듭니다.$x그리고.$y이를 통해 코드는 다음과 같은 공격에 취약해집니다.http://www.example.com/page.php?authenticated=1.

쿼리 문자열 전체를 원하는 경우:

$_SERVER["QUERY_STRING"]

최적의 답변은 다음과 같습니다.

<?php
    echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>

사용자가 http://example.com/?name=Hannes 라고 입력했다고 가정합니다.

위의 예는 다음과 같습니다.

Hannes님 안녕하세요!

프로그래밍 언어: PHP

// Inintialize a URL to the variable 
$url = 'https://www.youtube.com/watch?v=qnMxsGeDz90'; 
    
// Use parse_url() function to parse the URL 
// and return an associative array which contains its various components 
$url_components = parse_url($url); 

// Use the parse_str() function to parse the 
// string passed via the URL 
parse_str($url_components['query'], $params); 
    
// Display result 
echo 'v parameter value is ' . $params['v'];

이건 나한테 효과가 있었어.

또한 쿼리 문자열과 함께 현재 파일 이름을 찾는 경우 다음 작업만 수행하면 됩니다.

basename($_SERVER['REQUEST_URI'])

다음 예시와 같은 정보를 제공합니다.

file.filename?filename1=val&filename2=val

루트부터 시작하는 파일 전체 경로(예: /folder/folder2/file.filename?filename1=val&filename2=val)를 원하는 경우 basename() 함수를 삭제하고 채우기만 사용하십시오.

$_SERVER['REQUEST_URI']

이 코드와 표기법은 내 것이 아니다.Evan K는 커스텀 함수를 사용하여 다중값 동명 쿼리를 해결합니다.)는 다음에서 가져옵니다.

http://php.net/manual/en/function.parse-str.php#76792 학점은 에반 K에게 돌아간다.

그것은 을 언급하고 있다.parse_strbuiltin은 중복된 필드에 대해 CGI 표준 방식으로 쿼리 문자열을 처리하지 않습니다.쿼리 문자열에 동일한 이름의 필드가 여러 개 있는 경우 다른 모든 웹 처리 언어가 해당 필드를 배열로 읽지만 PHP는 이러한 필드를 자동으로 덮어씁니다.

<?php
# silently fails to handle multiple values
parse_str('foo=1&foo=2&foo=3');

# the above produces:
$foo = array('foo' => '3');
?>

대신, PHP는 동일한 효과를 얻기 위해 필드 이름에 대괄호를 포함하는 비표준 준수 관행을 사용합니다.

<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');

# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>

이는 CGI 표준에 익숙한 사용자에게 혼란을 줄 수 있으므로 유의하십시오.대신 적절한 쿼리 문자열 파서 함수를 사용합니다.

<?php
function proper_parse_str($str) {
  # result array
  $arr = array();

  # split on outer delimiter
  $pairs = explode('&', $str);

  # loop through each pair
  foreach ($pairs as $i) {
    # split into name and value
    list($name,$value) = explode('=', $i, 2);
    
    # if name already exists
    if( isset($arr[$name]) ) {
      # stick multiple values into an array
      if( is_array($arr[$name]) ) {
        $arr[$name][] = $value;
      }
      else {
        $arr[$name] = array($arr[$name], $value);
      }
    }
    # otherwise, simply stick it in a scalar
    else {
      $arr[$name] = $value;
    }
  }

  # return result array
  return $arr;
}

$query = proper_parse_str($_SERVER['QUERY_STRING']);
?>

REFERERER 쿼리 문자열의 일부를 재구축하는 기능이 있습니다.

발신측 페이지의 URL에 쿼리 문자열이 이미 포함되어 있는 경우, 그 페이지로 돌아와, 그 일부를 송신할 필요가 있습니다(전송할 필요가 있습니다.$_GET변수(예: 페이지 번호)

문자열은 ": Referrer"입니다.?foo=1&bar=2&baz=3, " "refererQueryString( 'foo' , 'baz' )foo=1&baz=3":

function refererQueryString(/* var args */) {

    //Return empty string if no referer or no $_GET vars in referer available:
    if (!isset($_SERVER['HTTP_REFERER']) ||
        empty( $_SERVER['HTTP_REFERER']) ||
        empty(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY ))) {

        return '';
    }

    //Get URL query of referer (something like "threadID=7&page=8")
    $refererQueryString = parse_url(urldecode($_SERVER['HTTP_REFERER']), PHP_URL_QUERY);

    //Which values do you want to extract? (You passed their names as variables.)
    $args = func_get_args();

    //Get '[key=name]' strings out of referer's URL:
    $pairs = explode('&',$refererQueryString);

    //String you will return later:
    $return = '';

    //Analyze retrieved strings and look for the ones of interest:
    foreach ($pairs as $pair) {
        $keyVal = explode('=',$pair);
        $key = &$keyVal[0];
        $val = urlencode($keyVal[1]);
        //If you passed the name as arg, attach current pair to return string:
        if(in_array($key,$args)) {
            $return .= '&'. $key . '=' .$val;
        }
    }

    //Here are your returned 'key=value' pairs glued together with "&":
    return ltrim($return,'&');
}

//If your referer was 'page.php?foo=1&bar=2&baz=3'
//and you want to header() back to 'page.php?foo=1&baz=3'
//(no 'bar', only foo and baz), then apply:

header('Location: page.php?'.refererQueryString('foo','baz'));

@K 덕분입니다.샤자드.

이는 재작성 추가 없이 재작성된 쿼리 문자열을 원할 때 도움이 됩니다.예를 들어 /test/를 다시 쓴다고 칩시다.x=y에서 index.model로?q=test&x=y이며 쿼리 문자열만 필요합니다.

function get_query_string(){

    $arr = explode("?", $_SERVER['REQUEST_URI']);
    if (count($arr) == 2){
        return "";
    }
    else{
        return "?" . end($arr) . "<br>";
    }
}
$query_string = get_query_string();

내의 각하려면 , URI 를 합니다.explode()_SERVER[''']의 경우 REQUEST_URI합니다.''_URI''' 을 가져오려면 하여 $POST GET 파라미터 합니다).문자열이 전달되었는지 여부를 모르는 상태에서 문자열을 가져오려면 내가 정의한 함수를 사용하여 $_REQUEST에서 쿼리 파라미터를 가져옵니다(POST 파라미터와 GET 파라미터 모두에 대해 동작합니다).

function getv($key, $default = '', $data_type = '')
{
    $param = (isset($_REQUEST[$key]) ? $_REQUEST[$key] : $default);

    if (!is_array($param) && $data_type == 'int') {
        $param = intval($param);
    }

    return $param;
}

쿼리 파라미터를 Integer 타입으로 변환하고 싶은 경우가 있기 때문에 이 함수에 세 번째 파라미터를 추가했습니다.

언급URL : https://stackoverflow.com/questions/8469767/get-url-query-string-parameters

반응형