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"); }
/** * 根据配置文件的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'); } }
/** * 根据配置文件的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'); }
/** * 根据配置文件的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"); }
/** * 根据配置文件的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'); }