2011-03-31 139 views
0

我正在使用PHP爆炸函数。该功能用于检测页面URL。PHP拆分字符串

在我们的网站设置,该页面的网址是:

  1. /应用/家庭/ (主页)
  2. /应用/答案/列表(搜索列表页)
  3. /应用/答案/细节/ A_ID/309 (答案详细信息页)
  4. /应用/答案/列表/会话/ L3NpZC9WVmpBQWlxaw%3D%3D

目前,我正在使用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 /部分总是固定的,其余部分将会改变。

干杯, 清

回答

1

一般来说,当你有很多的,如果像/否则条件,这将是更常见的使用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(或类似的)来将'friendly'URL重定向到实际的PHP页面上?

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

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

如果实现这一点,你很可能丢掉所有的工作你在节目中与explode()做,然后挑选出URL中的相关内容,并在你的服务器配置大约五线替换所有(.htaccess )。

希望有所帮助。

+0

我无法重写URL结构。由于供应商不会允许我这样做。谢谢Spudley。 – QLiu 2011-03-31 12:10:20

+0

@QLui:这真是一个耻辱,因为它会是一个更好的方式。你确定吗?这些日子是很常见的事情,很多常见的软件包都依赖于mod_rewrite的友好URL(Drupal,Wordpress等等等等),所以我希望任何一个半得体的托管供应商都允许你这样做。所以,如果你的主机供应商不允许你使用mod_rewrite,那么我会说你的网络主机错了!有时间找到更好的人。 – Spudley 2011-03-31 12:14:44

+0

如果此功能在每次页面加载时都运行,它是否会减慢速度? – QLiu 2011-03-31 12:16:53

2

查找Zend framework Router

+1

虽然这可以被认为是一个正确的答案,我会给它一个-1,因为这不以任何方式帮助OP。 – fabrik 2011-03-31 11:47:49

+2

OP没有问任何问题。他想知道:) – Emmerman 2011-03-31 11:49:00

+0

你做了我的一天。我必须解除我的投票:D – fabrik 2011-03-31 11:49:44