/**
  * Formats query string
  *
  * @param array   $params
  * @param boolean $skip_empty
  * @param string  $separator
  * @return string
  */
 public static function url_query($params = array(), $skip_empty = false, $separator = '&')
 {
     $str = '';
     static $stack = array();
     foreach ((array) $params as $key => $value) {
         if ($skip_empty === true && empty($value)) {
             continue;
         }
         array_push($stack, $key);
         if (is_array($value)) {
             if (count($value)) {
                 $str .= ($str != '' ? '&' : '') . Util_Environment::url_query($value, $skip_empty, $key);
             }
         } else {
             $name = '';
             foreach ($stack as $key) {
                 $name .= $name != '' ? '[' . $key . ']' : $key;
             }
             $str .= ($str != '' ? $separator : '') . $name . '=' . rawurlencode($value);
         }
         array_pop($stack);
     }
     return $str;
 }