Example #1
0
function U($pathinfo, $args = array())
{
    if (preg_match("/^https?:\\/\\//i", $pathinfo)) {
        return $pathinfo;
    }
    $end = strpos($pathinfo, '.php');
    if ($end) {
        $web = __ROOT__ . '/' . substr($pathinfo, 0, $end + 4);
        $pathinfo = substr($pathinfo, $end + 4);
    } else {
        $web = __WEB__;
    }
    if (is_string($args)) {
        parse_str($args, $args);
    }
    $parseUrl = parse_url(trim($pathinfo, '/'));
    $path = trim($parseUrl['path'], '/');
    if (isset($parseUrl['query'])) {
        parse_str($parseUrl['query'], $query);
        $args = array_merge($query, $args);
    }
    $gets = array();
    if (is_array($args)) {
        foreach ($args as $n => $q) {
            array_push($gets, $n);
            array_push($gets, $q);
        }
    }
    $vars = explode("/", $path);
    $urlType = C("URL_TYPE");
    switch ($urlType) {
        case 1:
            $root = $web . '/';
            break;
        case 2:
            $root = $web . '?';
            break;
    }
    $set_app_group = false;
    if (defined("GROUP_PATH")) {
        $set_app_group = true;
    }
    $data = array();
    switch (count($vars)) {
        case 2:
            if ($set_app_group) {
                $data[] = C("VAR_APP");
                $data[] = APP;
            }
            $data[] = C("VAR_CONTROL");
            $data[] = array_shift($vars);
            $data[] = C("VAR_METHOD");
            $data[] = array_shift($vars);
            break;
        case 1:
            if ($set_app_group) {
                $data[] = C("VAR_APP");
                $data[] = APP;
            }
            $data[] = C("VAR_CONTROL");
            $data[] = CONTROL;
            $data[] = C("VAR_METHOD");
            $data[] = array_shift($vars);
            break;
        default:
            $data[] = C("VAR_APP");
            $data[] = array_shift($vars);
            $data[] = C("VAR_CONTROL");
            $data[] = array_shift($vars);
            $data[] = C("VAR_METHOD");
            $data[] = array_shift($vars);
            if (is_array($vars)) {
                foreach ($vars as $v) {
                    $data[] = $v;
                }
            }
    }
    $varsAll = array_merge($data, $gets);
    $url = '';
    switch ($urlType) {
        case 1:
            foreach ($varsAll as $value) {
                $url .= C('PATHINFO_Dli') . $value;
            }
            $url = str_replace(array("/" . C("VAR_APP") . "/", "/" . C("VAR_CONTROL") . "/", "/" . C("VAR_METHOD") . "/"), "/", $url);
            $url = substr($url, 1);
            break;
        case 2:
            foreach ($varsAll as $k => $value) {
                if ($k % 2) {
                    $url .= '=' . $value;
                } else {
                    $url .= '&' . $value;
                }
            }
            $url = substr($url, 1);
            break;
    }
    $pathinfo_html = $urlType === 1 ? '.' . trim(C("PATHINFO_HTML"), '.') : '';
    if (C("URL_REWRITE")) {
        $root = preg_replace('/\\w+?\\.php\\/?/i', '', $root);
    }
    return $root . Route::toUrl($url) . $pathinfo_html . C("PATHINFO_HTML");
}
Example #2
0
 /**
  * 根据配置文件的URL参数重新生成URL地址
  * @param String $path 访问url
  * @param array $args GET参数
  * <code>
  * $args = "nid=2&cid=1"
  * $args=array("nid"=>2,"cid"=>1)
  * </code>
  * @return string
  */
 public function url($path, $args = array())
 {
     if (preg_match('/^https?:\\/\\//', $path)) {
         return $path;
     }
     /**
      * 开启伪静态时去除入口文件
      */
     $root = C('URL_REWRITE') ? preg_replace('/\\/?[a-z]+\\.php/i', '', __WEB__) : __WEB__;
     /**
      * Host主机
      */
     switch (C("http.url_type")) {
         case 1:
             $root .= '/';
             //入口位置
             break;
         case 2:
             $root .= C('URL_REWRITE') ? '/' : '?';
             break;
         case 3:
             $root .= (C('URL_REWRITE') ? '/' : '?') . C('http.pathinfo_var') . '=';
             break;
     }
     if (preg_match('@[^\\w/]@i', $path)) {
         /**
          * 参数如: m=Index&c=Index&a=index&cid=1&page=2
          * 这样形式时直接进行路由解析
          * 比如在分页类时使用
          */
         return $root . Route::toUrl($path) . C('HTML_SUFFIX');
     } else {
         $action = array();
         $info = explode('/', $path);
         if (count($info) > 3) {
             $param = array_slice($info, 3);
             $info = array_slice($info, 0, 3);
             for ($i = 0; $i < count($param); $i += 2) {
                 $args[$param[$i]] = $param[$i + 1];
             }
         }
         switch (count($info)) {
             case 3:
                 $action[C("http.var_module")] = ucfirst($info[0]);
                 $action[C("http.var_controller")] = ucfirst($info[1]);
                 $action[C("http.var_action")] = $info[2];
                 break;
             case 2:
                 $action[C("http.var_module")] = ucfirst(MODULE);
                 $action[C("http.var_controller")] = ucfirst($info[0]);
                 $action[C("http.var_action")] = $info[1];
                 break;
             case 1:
                 $action[C("http.var_module")] = ucfirst(MODULE);
                 $action[C("http.var_controller")] = ucfirst(CONTROLLER);
                 $action[C("http.var_action")] = $info[0];
                 break;
             default:
         }
         switch (C("http.url_type")) {
             case 1:
             case 3:
                 $url = $action[C("http.var_module")] . '/' . $action[C("http.var_controller")] . '/' . $action[C("http.var_action")];
                 break;
             case 2:
                 $url = C("http.var_module") . '=' . $action[C("http.var_module")] . '&' . C("http.var_controller") . '=' . $action[C("http.var_controller")] . '&' . C("http.var_action") . '=' . $action[C("http.var_action")];
                 break;
         }
         /**
          * 参数$args为字符串时转数组
          */
         if (is_string($args)) {
             parse_str($args, $args);
         }
         /**
          * 处理参数
          */
         if (!empty($args)) {
             switch (C("http.url_type")) {
                 case 1:
                 case 3:
                     foreach ($args as $name => $value) {
                         $url .= '/' . $name . '/' . $value;
                     }
                     break;
                 case 2:
                     foreach ($args as $name => $value) {
                         $url .= '&' . $name . '=' . $value;
                     }
                     break;
             }
         }
         return $root . Route::toUrl($url) . C('HTML_SUFFIX');
     }
 }
Example #3
0
/**
 * 根据配置文件的URL参数重新生成URL地址
 * @param String $path 访问url
 * @param array $args GET参数
 * <code>
 * $args = "nid=2&cid=1"
 * $args=array("nid"=>2,"cid"=>1)
 * </code>
 * @return string
 */
function U($path, $args = array())
{
    if (preg_match("/^https?:\\/\\//i", $path) || empty($path)) {
        return $path;
    }
    //参数$args为字符串时转数组
    if (is_string($args)) {
        parse_str($args, $args);
    }
    $parseUrl = parse_url(trim($path, '/'));
    if (!isset($parseUrl['path'])) {
        return $path;
    }
    $path = trim($parseUrl['path'], '/');
    //解析字符串的?后参数 并与$args合并
    if (isset($parseUrl['query'])) {
        parse_str($parseUrl['query'], $query);
        $args = array_merge($query, $args);
    }
    //组合出索引数组  将?后参数与$args传参
    $gets = array();
    if (is_array($args)) {
        foreach ($args as $n => $q) {
            array_push($gets, $n);
            array_push($gets, $q);
        }
    }
    $vars = explode("/", $path);
    //入口文件类型
    switch (C("URL_TYPE")) {
        case 1:
            $root = __WEB__ . '/';
            //入口位置
            break;
        case 2:
            $root = __WEB__ . '?';
            break;
        case 3:
            $root = __WEB__ . '?' . C('PATHINFO_VAR') . '=';
            break;
    }
    //组合出__WEB__后内容
    $data = array();
    //模块组
    if (isset($_GET[C('VAR_GROUP')])) {
        $data[] = C('VAR_GROUP');
        $data[] = $_GET[C('VAR_GROUP')];
    }
    switch (count($vars)) {
        case 2:
            //应用
            $data[] = C("VAR_MODULE");
            $data[] = MODULE;
            $data[] = C("VAR_CONTROLLER");
            $data[] = array_shift($vars);
            $data[] = C("VAR_ACTION");
            $data[] = array_shift($vars);
            break;
        case 1:
            //方法
            $data[] = C("VAR_MODULE");
            $data[] = MODULE;
            $data[] = C("VAR_CONTROLLER");
            $data[] = CONTROLLER;
            $data[] = C("VAR_ACTION");
            $data[] = array_shift($vars);
            break;
        default:
            //应用组及其他情况
            $data[] = C("VAR_MODULE");
            $data[] = array_shift($vars);
            $data[] = C("VAR_CONTROLLER");
            $data[] = array_shift($vars);
            $data[] = C("VAR_ACTION");
            $data[] = array_shift($vars);
            if (is_array($vars)) {
                foreach ($vars as $v) {
                    $data[] = $v;
                }
            }
    }
    //合并GET参数
    $varsAll = array_merge($data, $gets);
    $url = '';
    switch (C("URL_TYPE")) {
        case 1:
        case 3:
            foreach ($varsAll as $value) {
                $url .= C('PATHINFO_Dli') . $value;
            }
            $url = str_replace(array("/" . C("VAR_MODULE") . "/", "/" . C("VAR_CONTROLLER") . "/", "/" . C("VAR_ACTION") . "/"), "/", $url);
            $url = substr($url, 1);
            break;
        case 2:
            foreach ($varsAll as $k => $value) {
                if ($k % 2) {
                    $url .= '=' . $value;
                } else {
                    $url .= '&' . $value;
                }
            }
            $url = substr($url, 1);
            break;
    }
    return $root . Route::toUrl($url) . C('HTML_SUFFIX');
}
Example #4
0
/**
 * 根据配置文件的URL参数重新生成URL地址
 * @param String $pathinfo 访问url
 * @param array $args GET参数
 * <code>
 * $args = "nid=2&cid=1"
 * $args=array("nid"=>2,"cid"=>1)
 * </code>
 * @return string
 */
function U($pathinfo, $args = array())
{
    if (preg_match("/^https?:\\/\\//i", $pathinfo)) {
        return $pathinfo;
    }
    //是否指定单入口
    $end = strpos($pathinfo, '.php');
    if ($end) {
        $web = __ROOT__ . '/' . substr($pathinfo, 0, $end + 4);
        $pathinfo = substr($pathinfo, $end + 4);
    } else {
        $web = __WEB__;
    }
    //参数$args为字符串时转数组
    if (is_string($args)) {
        parse_str($args, $args);
    }
    $parseUrl = parse_url(trim($pathinfo, '/'));
    $path = trim($parseUrl['path'], '/');
    //解析字符串的?后参数 并与$args合并
    if (isset($parseUrl['query'])) {
        parse_str($parseUrl['query'], $query);
        $args = array_merge($query, $args);
    }
    //组合出索引数组  将?后参数与$args传参
    $gets = array();
    if (is_array($args)) {
        foreach ($args as $n => $q) {
            array_push($gets, $n);
            array_push($gets, $q);
        }
    }
    $vars = explode("/", $path);
    //入口文件类型
    $urlType = C("URL_TYPE");
    //1 pathinfo 2 get
    switch ($urlType) {
        case 1:
            $root = $web . '/';
            //入口位置
            break;
        case 2:
            $root = $web . '?';
            break;
    }
    //是否定义应用组
    $set_app_group = false;
    if (defined("GROUP_PATH")) {
        $set_app_group = true;
    }
    //组合出__WEB__后内容
    $data = array();
    switch (count($vars)) {
        case 2:
            //应用
            if ($set_app_group) {
                $data[] = C("VAR_APP");
                $data[] = APP;
            }
            $data[] = C("VAR_CONTROL");
            $data[] = array_shift($vars);
            $data[] = C("VAR_METHOD");
            $data[] = array_shift($vars);
            break;
        case 1:
            //方法
            if ($set_app_group) {
                $data[] = C("VAR_APP");
                $data[] = APP;
            }
            $data[] = C("VAR_CONTROL");
            $data[] = CONTROL;
            $data[] = C("VAR_METHOD");
            $data[] = array_shift($vars);
            break;
        default:
            //应用组及其他情况
            $data[] = C("VAR_APP");
            $data[] = array_shift($vars);
            $data[] = C("VAR_CONTROL");
            $data[] = array_shift($vars);
            $data[] = C("VAR_METHOD");
            $data[] = array_shift($vars);
            if (is_array($vars)) {
                foreach ($vars as $v) {
                    $data[] = $v;
                }
            }
    }
    $varsAll = array_merge($data, $gets);
    //合并GET参数
    $url = '';
    switch ($urlType) {
        case 1:
            foreach ($varsAll as $value) {
                $url .= C('PATHINFO_Dli') . $value;
            }
            $url = str_replace(array("/" . C("VAR_APP") . "/", "/" . C("VAR_CONTROL") . "/", "/" . C("VAR_METHOD") . "/"), "/", $url);
            $url = substr($url, 1);
            break;
        case 2:
            foreach ($varsAll as $k => $value) {
                if ($k % 2) {
                    $url .= '=' . $value;
                } else {
                    $url .= '&' . $value;
                }
            }
            $url = substr($url, 1);
            break;
    }
    $pathinfo_html = $urlType === 1 ? '.' . trim(C("PATHINFO_HTML"), '.') : '';
    //伪表态后缀如.html
    return $root . Route::toUrl($url) . $pathinfo_html . C("PATHINFO_HTML");
}
Example #5
0
 /**
  * 根据配置文件的URL参数重新生成URL地址
  * @param String $path 访问url
  * @param array $args GET参数
  * <code>
  * $args = "nid=2&cid=1"
  * $args=array("nid"=>2,"cid"=>1)
  * </code>
  * @return string
  */
 public static function getUrl($path, $args = array())
 {
     if (preg_match('/^https?:\\/\\//', $path)) {
         return $path;
     }
     /**
      * 参数$args为字符串时转数组
      */
     if (is_string($args)) {
         parse_str($args, $args);
     }
     /**
      * 模块组时添加g参数
      */
     if (!empty($_GET[C('VAR_GROUP')])) {
         $args[C('VAR_GROUP')] = $_GET[C('VAR_GROUP')];
     }
     /**
      * 开启伪静态时去除入口文件
      */
     $root = C('URL_REWRITE') ? preg_replace('/\\/?[a-z]+\\.php/i', '', __WEB__) : __WEB__;
     /**
      * Host主机
      */
     switch (C("URL_TYPE")) {
         case 1:
             $root .= '/';
             //入口位置
             break;
         case 2:
             $root .= C('URL_REWRITE') ? '/' : '?';
             break;
         case 3:
             $root .= (C('URL_REWRITE') ? '/' : '?') . C('PATHINFO_VAR') . '=';
             break;
     }
     $action = array();
     $info = explode('/', $path);
     switch (count($info)) {
         case 3:
             $action[C("VAR_MODULE")] = ucfirst($info[0]);
             $action[C("VAR_CONTROLLER")] = ucfirst($info[1]);
             $action[C("VAR_ACTION")] = $info[2];
             break;
         case 2:
             $action[C("VAR_MODULE")] = ucfirst(MODULE);
             $action[C("VAR_CONTROLLER")] = ucfirst($info[0]);
             $action[C("VAR_ACTION")] = $info[1];
             break;
         case 1:
             $action[C("VAR_MODULE")] = ucfirst(MODULE);
             $action[C("VAR_CONTROLLER")] = ucfirst(CONTROLLER);
             $action[C("VAR_ACTION")] = $info[0];
             break;
     }
     switch (C("URL_TYPE")) {
         case 1:
         case 3:
             $url = $action[C("VAR_MODULE")] . '/' . $action[C("VAR_CONTROLLER")] . '/' . $action[C("VAR_ACTION")];
             break;
         case 2:
             $url = C("VAR_MODULE") . '=' . $action[C("VAR_MODULE")] . '&' . C("VAR_CONTROLLER") . '=' . $action[C("VAR_CONTROLLER")] . '&' . C("VAR_ACTION") . '=' . $action[C("VAR_ACTION")];
             break;
     }
     /**
      * 处理参数
      */
     if (!empty($args)) {
         switch (C("URL_TYPE")) {
             case 1:
             case 3:
                 foreach ($args as $name => $value) {
                     $url .= '/' . $name . '/' . $value;
                 }
                 break;
             case 2:
                 foreach ($args as $name => $value) {
                     $url .= '&' . $name . '=' . $value;
                 }
                 break;
         }
     }
     return $root . Route::toUrl($url) . C('HTML_SUFFIX');
 }