복붙노트

URL 쿼리 문자열 가져 오기

PHP

URL 쿼리 문자열 가져 오기

다음과 같이 형식화 된 URL 쿼리 문자열에서 매개 변수를 가져 오는 "적은 코드 필요"방법은 무엇입니까?

출력은 다음과 같아야합니다. myqueryhash

나는이 접근법을 알고있다 :

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

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

해결법

  1. ==============================

    1.$ _SERVER [ 'QUERY_STRING']은 (는) 찾고있는 데이터를 포함하고 있습니다.

    $ _SERVER [ 'QUERY_STRING']은 (는) 찾고있는 데이터를 포함하고 있습니다.

    선적 서류 비치

  2. ==============================

    2.PHP를 사용하는 방법은 parse_url 함수를 사용하는 것입니다. parse_url은 URL을 파싱하고 해당 구성 요소를 반환합니다. 쿼리 문자열 포함.

    PHP를 사용하는 방법은 parse_url 함수를 사용하는 것입니다. parse_url은 URL을 파싱하고 해당 구성 요소를 반환합니다. 쿼리 문자열 포함.

    예:

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

    전체 문서는 여기에

  3. ==============================

    3.parse_str () 함수는 모든 쿼리 매개 변수를 자동으로 배열로 읽습니다.

    parse_str () 함수는 모든 쿼리 매개 변수를 자동으로 배열로 읽습니다.

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

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

    $ 쿼리에 'x'= 100 및 'y'= 200을 저장합니다.

    parse_str의 문서를 보라.

    편집하다

    PHP 문서에 따르면 parse_str ()은 두 번째 매개 변수와 함께 사용해야합니다. 이 URL에서 parse_str ($ _ SERVER [ 'QUERY_STRING'])을 사용하면 변수 $ x 및 $ y가 만들어 지므로 코드가 http://www.example.com/page.php?authenticated=1과 같은 공격에 취약 해집니다.

  4. ==============================

    4.전체 쿼리 문자열을 원한다면 :

    전체 쿼리 문자열을 원한다면 :

    $_SERVER["QUERY_STRING"]
    
  5. ==============================

    5.나는 최선의 대답을 다음과 같이 추천 할 것이다.

    나는 최선의 대답을 다음과 같이 추천 할 것이다.

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

    위의 예는 다음과 같이 출력됩니다.

    안녕하세요!

  6. ==============================

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

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

    basename($_SERVER['REQUEST_URI'])
    

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

    또한 파일의 전체 경로를 루트에서 시작하려는 경우 (예 : /folder/folder2/file.php?arg1=val&arg2=val 다음 basename () 함수를 제거하고 fillowing 만 사용하십시오.

    $_SERVER['REQUEST_URI']
    
  7. ==============================

    7.REFERRER 쿼리 문자열의 일부를 다시 작성하는 기능은 다음과 같습니다.

    REFERRER 쿼리 문자열의 일부를 다시 작성하는 기능은 다음과 같습니다.

    호출 페이지에 이미 자체 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'));
    
  8. ==============================

    8.URI에서 각 노드를 얻으려면, $ _SERVER [ 'REQUEST_URI']에 함수 explode ()를 사용할 수 있습니다. 문자열이 전달되는지 여부를 모른 채 문자열을 얻고 싶다면. $ _REQUEST의 질의 매개 변수를 얻기 위해 내가 정의한 함수를 사용할 수있다 (POST와 GET 매개 변수 모두에 대해 작동하기 때문에).

    URI에서 각 노드를 얻으려면, $ _SERVER [ 'REQUEST_URI']에 함수 explode ()를 사용할 수 있습니다. 문자열이 전달되는지 여부를 모른 채 문자열을 얻고 싶다면. $ _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;
    }
    

    쿼리 매개 변수를 정수 유형으로 변환하려는 경우가있을 수 있으므로이 함수에 세 번째 매개 변수를 추가했습니다.

  9. ==============================

    9.이 코드와 표기법은 제 것이 아닙니다. Evan K는 사용자 정의 함수를 사용하여 다중 값 동일한 이름 쿼리를 해결합니다. 에서 가져온 것입니다 :

    이 코드와 표기법은 제 것이 아닙니다. Evan K는 사용자 정의 함수를 사용하여 다중 값 동일한 이름 쿼리를 해결합니다. 에서 가져온 것입니다 :

    http://php.net/manual/en/function.parse-str.php#76792 크레딧은 Evan K로 이동합니다.

    그것은 parse_str builtin이 중복 된 필드에 관해서는 CGI 표준 방식으로 쿼리 문자열을 처리하지 않는다는 것을 언급합니다. 같은 이름의 여러 필드가 쿼리 문자열에 존재하면 다른 모든 웹 처리 언어가 배열을 읽어들이지만 PHP는 자동으로 덮어 씁니다.

    <?php
    # silently fails to handle multiple values
    parse_str('foo=1&foo=2&foo=3');
    
    # the above produces:
    $foo = array('foo' => '3');
    ?>
    
    Instead, PHP uses a non-standards compliant practice of including brackets in fieldnames to achieve the same effect.
    
    <?php
    # bizarre php-specific behavior
    parse_str('foo[]=1&foo[]=2&foo[]=3');
    
    # the above produces:
    $foo = array('foo' => array('1', '2', '3') );
    ?>
    
    This can be confusing for anyone who's used to the CGI standard, so keep it in mind.  As an alternative, I use a "proper" querystring parser function:
    
    <?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']);
    ?>
    
  10. ==============================

    10.@K에 감사드립니다. 샤 자드 이는 다시 쓰기 추가없이 다시 쓰기 쿼리 문자열을 원할 때 도움이됩니다. / test /? x = y를 index.php? q = test & x = y로 다시 작성하고 쿼리 문자열 만 원한다고 가정 해 보겠습니다.

    @K에 감사드립니다. 샤 자드 이는 다시 쓰기 추가없이 다시 쓰기 쿼리 문자열을 원할 때 도움이됩니다. / test /? x = y를 index.php? 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();
    
  11. from https://stackoverflow.com/questions/8469767/get-url-query-string by cc-by-sa and MIT license