Exemplo n.º 1
0
 /**
  * URIにGETクエリーを追加する(真面目にURLをパースしてから追加している)
  *
  * @access  public
  * @param   string  $uri
  * @param   string|array   $add_get
  * @param   boolean  $add_sid
  * @param   string|null $sepa
  * @return  string
  */
 function addQueryToUri($uri, $add_get, $add_sid = false, $sepa = '&')
 {
     $sepa_def = '&';
     if (is_null($sepa)) {
         if (!($sepa = ini_get('arg_separator.output'))) {
             $sepa = $sepa_def;
         }
     } else {
         $before = ini_get('arg_separator.output');
         ini_set('arg_separator.output', $sepa);
     }
     if (is_array($add_get)) {
         $add_get_ar = $add_get;
         $add_get_st = http_build_query($add_get);
     } else {
         $qe = explode($sepa, $add_get);
         // array('a=1', 'b=2')
         $qs = array();
         foreach ($qe as $v) {
             $e = explode('=', $v, 2);
             if (strlen($e[0])) {
                 $qs[$e[0]] = urldecode($e[1]);
             }
         }
         $add_get_ar = $qs;
         $add_get_st = $add_get;
     }
     // PHP Warning:  parse_url(hoge.php?url=http://example.com/): Unable to parse URL
     if (strlen($uri) and $uri = preg_replace('/=(http|ftp|https):/', '=$1%3A', $uri) and $parsed = parse_url($uri)) {
         if (isset($parsed['query'])) {
             $qe = explode($sepa, $parsed['query']);
             // array('a=1', 'b=2')
             $qs = array();
             foreach ($qe as $v) {
                 $e = explode('=', $v, 2);
                 if (strlen($e[0])) {
                     $qs[$e[0]] = urldecode($e[1]);
                 }
             }
             $add_get_st = http_build_query(array_merge($qs, $add_get_ar));
         }
         if ($add_get_st) {
             $parsed['query'] = $add_get_st;
         } else {
             unset($parsed['query']);
         }
         $uri = UriUtil::glueUri($parsed);
     } else {
         $mark = strpos($uri, '?') === false ? '?' : $sepa;
         if ($add_get_st) {
             $uri .= $mark . $add_get_st;
         }
     }
     if (isset($before)) {
         ini_set('arg_separator.output', $before);
     }
     if (true === $add_sid) {
         $uri = UriUtil::addSIDToUri($uri, $sepa);
     }
     return $uri;
 }