Get URL query string parameters

前端 未结 11 1286
长情又很酷
长情又很酷 2020-11-22 17:41

What is the \"less code needed\" way to get parameters from a URL query string which is formatted like the following?

www.mysite.com/category/subcateg

相关标签:
11条回答
  • 2020-11-22 17:49

    Also if you are looking for current file name along with the query string, you will just need following

    basename($_SERVER['REQUEST_URI'])
    

    It would provide you info like following example

    file.php?arg1=val&arg2=val

    And if you also want full path of file as well starting from root, e.g. /folder/folder2/file.php?arg1=val&arg2=val then just remove basename() function and just use fillowing

    $_SERVER['REQUEST_URI']
    
    0 讨论(0)
  • 2020-11-22 17:50

    Here is my function to rebuild parts of the REFERRER's query string.

    If the calling page already had a query string in its own URL, and you must go back to that page and want to send back some, not all, of that $_GET vars (e.g. a page number).

    Example: Referrer's query string was ?foo=1&bar=2&baz=3 calling refererQueryString( 'foo' , 'baz' ) returns 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'));
    
    0 讨论(0)
  • 2020-11-22 17:52

    The PHP way to do it is using the function parse_url, which parses a URL and return its components. Including the query string.

    Example:

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

    Full documentation here

    0 讨论(0)
  • 2020-11-22 17:56

    Programming Language: PHP

    // Inintialize 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 parse_str() function to parse the 
    // string passed via URL 
    parse_str($url_components['query'], $params); 
    
    // Display result 
    echo 'v parameter value is '.$params['v'];
    

    This worked for me. I hope, it will also help you :)

    0 讨论(0)
  • 2020-11-22 17:57

    This code and notation is not mine. Evan K solves a multi value same name query with a custom function ;) is taken from:

    http://php.net/manual/en/function.parse-str.php#76792 Credits go to Evan K.

    It bears mentioning that the parse_str builtin does NOT process a query string in the CGI standard way, when it comes to duplicate fields. If multiple fields of the same name exist in a query string, every other web processing language would read them into an array, but PHP silently overwrites them:

    <?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']);
    ?>
    
    0 讨论(0)
提交回复
热议问题