PHP拆分字符串

时间:2011-03-31 11:41:06

标签: php string

我正在使用PHP爆炸功能。此功能用于检测页面URL。

在我们的网站设置中,页面网址为:

  1. / app / home / (主页)
  2. / app / answers / list (搜索列表页面)
  3. / app / answers / detail / a_id / 309 (答案详情页面)
  4. /应用/答案/列表/会话/ L3NpZC9WVmpBQWlxaw%3D%3D
  5. 目前,我正在使用explode函数来拆分字符串并将它们存储在一个数组中。

    $currentLocation  =explode("/",$_SERVER["REQUEST_URI"]);
    
    Array ( [0] => [1] => app [2] => answers [3] => list [4] => session [5] => L3NpZC9WVmpBQWlxaw%3D%3D ) 
    

    然后有很多IF Else条件声明:

    if ($currentLocation [2]=='home')
            {
                $this->data['pageURL']=$currentLocation [2]; //Home directory
            }
            else if($currentLocation [2]=='answers')
            {
                $this->data['pageURL']= $currentLocation [4];
            }
    

    我想知道是否有一种聪明的方法来实现这一目标。谢谢。 URL的/ app /部分始终是固定的,其余的将更改。

    干杯, 清

2 个答案:

答案 0 :(得分:2)

寻找Zend framework Router

答案 1 :(得分:1)

通常当你有很多这样的if / else条件时,更常见的是使用switch语句:

switch $currentLocation[2] {
    case 'home' : $this->data['pageURL']=$currentLocation[2]; break;
    case 'answers' : $this->data['pageURL']= $currentLocation[4]; break;
    default: $this->data['pageURL']= $currentLocation[4]; break;
}

它比一堆elseif块更整洁,但它的代码并不多。

但是在这种情况下,我会说使用一组重写规则可能会获得更好的结果。您还没有指定它,但是根据您描述的URL,您可能在服务器配置中使用mod_rewrite(或类似)将“友好”URL重定向到实际的PHP页面?

这是我建议工作的地方。通过使用一组mod_rewrite规则,您可以让PHP页面接收正常的$_GET变量。

mod_rewrite允许您拥有/app/answers/detail/a_id/309之类的网址,但PHP程序会收到它,就好像用户输入了app.php?page=answers&section=detail&a_id=309一样。重写规则基于正则表达式,您可以使它们非常复杂,以允许各种不同的URL格式。

如果你实现了这一点,你可能会丢弃你在程序中使用explode()完成的所有工作,然后选择URL的相关位,并将其全部替换为服务器中的大约五行config(.htaccess)。

希望有所帮助。