您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 蚌埠分类信息网,免费分类信息发布

U函数,正常人版本

2025/2/20 5:02:06发布7次查看
tp自己的u函数太反人类了,把参数都伪静态,其实造成了极大的不兼容。很多cdn,rpc,浏览器,http协议,反向代理等应用会对此理解失误,具体的问题我说不上来,反正我觉得这种伪装成无数个文件的方法太煞笔了,文件就是文件,参数就是参数,把参数伪装成文件算是怎么回事啊!!!!太反人类了,完全不能忍
/**
 * url组装 支持不同url模式
 * @param string $url url表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
 * @param string|array $vars 传入的参数,支持数组和字符串
 * @param string $suffix 伪静态后缀,默认为true表示获取配置值
 * @param boolean $domain 是否显示域名
 * @return string
 */
function u($url='',$vars='',$suffix=true,$domain=false) {
    // 解析url
    $info   =  parse_url($url);
    $url    =  !empty($info['path'])?$info['path']:action_name;
    if(isset($info['fragment'])) { // 解析锚点
        $anchor =   $info['fragment'];
        if(false !== strpos($anchor,'?')) { // 解析参数
            list($anchor,$info['query']) = explode('?',$anchor,2);
        }        
        if(false !== strpos($anchor,'@')) { // 解析域名
            list($anchor,$host)    =   explode('@',$anchor, 2);
        }
    }elseif(false !== strpos($url,'@')) { // 解析域名
        list($url,$host)    =   explode('@',$info['path'], 2);
    }
    // 解析子域名
    if(isset($host)) {
        $domain = $host.(strpos($host,'.')?'':strstr($_server['http_host'],'.'));
    }elseif($domain===true){
        $domain = $_server['http_host'];
        if(c('app_sub_domain_deploy') ) { // 开启子域名部署
            $domain = $domain=='localhost'?'localhost':'www'.strstr($_server['http_host'],'.');
            // '子域名'=>array('模块[/控制器]');
            foreach (c('app_sub_domain_rules') as $key => $rule) {
                $rule   =   is_array($rule)?$rule[0]:$rule;
                if(false === strpos($key,'*') && 0=== strpos($url,$rule)) {
                    $domain = $key.strstr($domain,'.'); // 生成对应子域名
                    $url    =  substr_replace($url,'',0,strlen($rule));
                    break;
                }
            }
        }
    }
// 解析参数
    if(is_string($vars)) { // aaa=1&bbb=2 转换成数组
        parse_str($vars,$vars);
    }elseif(!is_array($vars)){
        $vars = array();
    }
    if(isset($info['query'])) { // 解析地址里面参数 合并到vars
        parse_str($info['query'],$params);
        $vars = array_merge($params,$vars);
    }
// url组装
    $depr       =   c('url_pathinfo_depr');
    $urlcase    =   c('url_case_insensitive');
    if($url) {
        if(0=== strpos($url,'/')) {// 定义路由
            $route      =   true;
            $url        =   substr($url,1);
            if('/' != $depr) {
                $url    =   str_replace('/',$depr,$url);
            }
        }else{
            if('/' != $depr) { // 安全替换
                $url    =   str_replace('/',$depr,$url);
            }
            // 解析模块、控制器和操作
            $url        =   trim($url,$depr);
            $path       =   explode($depr,$url);
            $var        =   array();
            $varmodule      =   c('var_module');
            $varcontroller  =   c('var_controller');
            $varaction      =   c('var_action');
            $var[$varaction]       =   !empty($path)?array_pop($path):action_name;
            $var[$varcontroller]   =   !empty($path)?array_pop($path):controller_name;
            if($maps = c('url_action_map')) {
                if(isset($maps[strtolower($var[$varcontroller])])) {
                    $maps    =   $maps[strtolower($var[$varcontroller])];
                    if($action = array_search(strtolower($var[$varaction]),$maps)){
                        $var[$varaction] = $action;
                    }
                }
            }
            if($maps = c('url_controller_map')) {
                if($controller = array_search(strtolower($var[$varcontroller]),$maps)){
                    $var[$varcontroller] = $controller;
                }
            }
            if($urlcase) {
                $var[$varcontroller]   =   parse_name($var[$varcontroller]);
            }
            $module =   '';
if(!empty($path)) {
                $var[$varmodule]    =   array_pop($path);
            }else{
                if(c('multi_module')) {
                    if(module_name != c('default_module') || !c('module_allow_list')){
                        $var[$varmodule]=   module_name;
                    }
                }
            }
            if($maps = c('url_module_map')) {
                if($_module = array_search(strtolower($var[$varmodule]),$maps)){
                    $var[$varmodule] = $_module;
                }
            }
            if(isset($var[$varmodule])){
                $module =   $var[$varmodule];
                unset($var[$varmodule]);
            }
}
    }
if(c('url_model') == 0) { // 普通模式url转换
        $url        =   __app__.'?'.c('var_module').={$module}&.http_build_query(array_reverse($var));
        if($urlcase){
            $url    =   strtolower($url);
        }        
        if(!empty($vars)) {
            $vars   =   http_build_query($vars);
            $url   .=   '&'.$vars;
        }
    }else{ // pathinfo模式或者兼容url模式
        if(isset($route)) {
            $url    =   __app__.'/'.rtrim($url,$depr);
        }else{
            $module =   defined('bind_module') ? '' : $module;
            $url    =   __app__.'/'.($module?$module.module_pathinfo_depr:'').implode($depr,array_reverse($var));
        }
        if($urlcase){
            $url    =   strtolower($url);
        }
        /*
        if(!empty($vars)) { // 添加参数
            foreach ($vars as $var => $val){
                if('' !== trim($val))   $url .= $depr . $var . $depr . urlencode($val);
            }                
        }
        */
        if($suffix) {
            $suffix   =  $suffix===true?c('url_html_suffix'):$suffix;
            if($pos = strpos($suffix, '|')){
                $suffix = substr($suffix, 0, $pos);
            }
            if($suffix && '/' != substr($url,-1)){
                $url  .=  '.'.ltrim($suffix,'.');
            }
            /*修改处*/
            if(!empty($vars)) {
                $vars   =   http_build_query($vars);
                $url   .=   '?'.$vars;
            }
        }
    }
    if(isset($anchor)){
        $url  .= '#'.$anchor;
    }
    if($domain) {
        $url   =  (is_ssl()?'https://':'http://').$domain.$url;
    }
    return $url;
}
ad:真正免费,域名+虚机+企业邮箱=0元
蚌埠分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录