Manipulate a url string by adding GET parameters

前端 未结 15 2099
旧巷少年郎
旧巷少年郎 2020-11-29 00:50

I want to add GET parameters to URLs that may and may not contain GET parameters without repeating ? or &.

Example:

If I want t

相关标签:
15条回答
  • 2020-11-29 00:57
    $data = array('foo'=>'bar',
                  'baz'=>'boom',
                  'cow'=>'milk',
                  'php'=>'hypertext processor');
    
    $queryString =  http_build_query($data);
    //$queryString = foo=bar&baz=boom&cow=milk&php=hypertext+processor
    
    echo 'http://domain.com?'.$queryString;
    //output: http://domain.com?foo=bar&baz=boom&cow=milk&php=hypertext+processor
    
    0 讨论(0)
  • 2020-11-29 00:58

    Example with updating existent parameters.

    Also url_encode used, and possibility to don't specify parameter value

        <?
        /**
         * Add parameter to URL
         * @param string $url
         * @param string $key
         * @param string $value
         * @return string result URL
         */
        function addToUrl($url, $key, $value = null) {
            $query = parse_url($url, PHP_URL_QUERY);
            if ($query) {
                parse_str($query, $queryParams);
                $queryParams[$key] = $value;
                $url = str_replace("?$query", '?' . http_build_query($queryParams), $url);
            } else {
                $url .= '?' . urlencode($key) . '=' . urlencode($value);
            }
            return $url;
        }
    
    0 讨论(0)
  • 2020-11-29 00:58
     /**
     * @example addParamToUrl('/path/to/?find=1', array('find' => array('search', 2), 'FILTER' => 'STATUS'))
     * @example addParamToUrl('//example.com/path/to/?find=1', array('find' => array('search', 2), 'FILTER' => 'STATUS'))
     * @example addParamToUrl('https://example.com/path/to/?find=1&FILTER=Y', array('find' => array('search', 2), 'FILTER' => 'STATUS'))
     *
     * @param       $url string url
     * @param array $addParams
     *
     * @return string
     */
    function addParamToUrl($url, array $addParams) {
      if (!is_array($addParams)) {
        return $url;
      }
    
      $info = parse_url($url);
    
      $query = array();
    
      if ($info['query']) {
        parse_str($info['query'], $query);
      }
    
      if (!is_array($query)) {
        $query = array();
      }
    
      $params = array_merge($query, $addParams);
    
      $result = '';
    
      if ($info['scheme']) {
        $result .= $info['scheme'] . ':';
      }
    
      if ($info['host']) {
        $result .= '//' . $info['host'];
      }
    
      if ($info['path']) {
        $result .= $info['path'];
      }
    
      if ($params) {
        $result .= '?' . http_build_query($params);
      }
    
      return $result;
    }
    
    0 讨论(0)
  • 2020-11-29 01:00
    <?php
    $url1 = '/test?a=4&b=3';
    $url2 = 'www.baidu.com/test?a=4&b=3&try_count=1';
    $url3 = 'http://www.baidu.com/test?a=4&b=3&try_count=2';
    $url4 = '/test';
    function add_or_update_params($url,$key,$value){
        $a = parse_url($url);
        $query = $a['query'] ? $a['query'] : '';
        parse_str($query,$params);
        $params[$key] = $value;
        $query = http_build_query($params);
        $result = '';
        if($a['scheme']){
            $result .= $a['scheme'] . ':';
        }
        if($a['host']){
            $result .= '//' . $a['host'];
        }
        if($a['path']){
            $result .=  $a['path'];
        }
        if($query){
            $result .=  '?' . $query;
        }
        return $result;
    }
    echo add_or_update_params($url1,'try_count',1);
    echo "\n";
    echo add_or_update_params($url2,'try_count',2);
    echo "\n";
    echo add_or_update_params($url3,'try_count',3);
    echo "\n";
    echo add_or_update_params($url4,'try_count',4);
    echo "\n";
    
    0 讨论(0)
  • 2020-11-29 01:06

    I think you should do it something like this.

    class myURL {
        protected $baseURL, $requestParameters;
    
        public function __construct ($newURL) {
            $this->baseurl = $newURL;
            $this->requestParameters = array();
        }
    
        public function addParameter ($parameter) {
            $this->requestParameters[] = $parameter;
        }
    
        public function __toString () {
            return $this->baseurl.
                   ( count($this->requestParameters) ?
                     '?'.implode('&', $this->requestParameters) :
                     ''
                     );
        }
    }
    
    $url1 = new myURL ('http://www.acme.com');
    $url2 = new myURL ('http://www.acme.com');
    $url2->addParameter('sort=popular');
    $url2->addParameter('category=action');
    $url1->addParameter('category=action');
    
    echo $url1."\n".$url2;
    
    0 讨论(0)
  • 2020-11-29 01:08
    $parameters = array();
    
    foreach ($get as $key => $value)
    {
         $parameters[] = $key.'='.$value;
    }
    
    $url = 'http://example.com/movies?'.implode('&', $parameters);
    
    0 讨论(0)
提交回复
热议问题