url解析

来源:互联网 发布:全球拍软件 编辑:程序博客网 时间:2024/05/12 04:31
//规则
public $urlMap = array(    array('module',     '',     '\w+',      NULL),    array(        array('type',     't',     '\d+',      0),        array('page',     'p',     '\d+',      1)    )

);

private function _parseUrl() {   //$uri = "/xxxx/xxxxx/";   $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : "";   $uris = explode("/", trim($uri, "/"));   for ($i=0, $n=0, $count=count($this->urlMap); $i<$count;){      $urlMap = $this->urlMap[$i];      if (is_array($urlMap[0])){         $ok     = false;         $match  = $this->_isMatch($urlMap, $uris[$n]);         foreach ($urlMap as $map){            $key = $map[0];            $this->defaultValue[$key]   = $map[3];            if ($match && isset($uris[$n]) && preg_match("/".$map[1]."(".$map[2].")/", $uris[$n], $mat)){               $val = ($mat[1] === NULL || $mat[1] === 'undefined') ? $map[3] : $mat[1];               $this->urlResult[$key] = array(                     $map[1],                     $val,                     $map[3]               );               $this->requestParams[$key] = $val;               $ok = true;            }            else {               $this->urlResult[$key] = array($map[1], $map[3], $map[3]);            }         }         if ($ok) $n++;      }      else {         $key = $urlMap[0];         $this->defaultValue[$key]   = $urlMap[3];         $matchStr = "/^".$urlMap[1]."(".$urlMap[2].")$/";         if(isset($urlMap[4])){            $matchStr = "/^".$urlMap[1]."(".$urlMap[2].")".$urlMap[4]."$/";         }         if (preg_match($matchStr, $uris[$n], $mat)){            $val = ($mat[1] === NULL || $mat[1] === 'undefined') ? $urlMap[3] : $mat[1];            if ($key == 'keyword') {               if (strpos($val, '+') === false) {                  $val = rawurldecode($val);               }               else {                  $val = urldecode($val);               }            }            $this->urlResult[$key] = array(                  $urlMap[1],                  $val,                  $urlMap[3]            );            if(isset($urlMap[4])){               $this->urlResult[$key][] = $urlMap[4];            }            $this->requestParams[$key] = $val;            $n++;         }         else {            $this->urlResult[$key] = array($urlMap[1], $urlMap[3], $urlMap[3]);         }      }      $i++;   }

private function _isMatch($regexps, $str){   $ret = array();   foreach ($regexps as $val) {      $ret[] = "({$val[1]}{$val[2]})?";   }   $regexp = "/^".implode("", $ret)."$/";   return preg_match($regexp, $str);}

url:

http://www.xxxx.com/abcde/t2/

解析后($this->requestParams):

Array ( [module] => abcde [type] => 2 [page] => 1 )


0 0