url解析

//规则
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 )


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值