【问题标题】:PHP split stringsPHP拆分字符串
【发布时间】:2011-03-31 19:56:44
【问题描述】:

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

在我们的网站设置中,页面 URL 是:

  1. /app/home/ (主页)
  2. /app/answers/list (搜索列表页面)
  3. /app/answers/detail/a_id/309 (答案详细信息页面)
  4. /app/answers/list/session/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/ 部分始终是固定的,其余部分会改变。

干杯, 清

【问题讨论】:

    标签: php string


    【解决方案1】:

    寻找Zend framework Router

    【讨论】:

    • 虽然这可以被认为是一个正确的答案,但我会给它一个-1,因为这对 OP 没有任何帮助。
    【解决方案2】:

    通常,当您有很多这样的 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 这样的 URL,但 PHP 程序会像用户输入 app.php?page=answers&section=detail&a_id=309 一样接收它。重写规则基于正则表达式,您可以使它们变得相当复杂,以允许各种不同的 URL 格式。

    如果你实现它,你可能会用explode() 扔掉你在程序中所做的所有工作,然后挑选出相关的 URL 位,并在你的服务器配置中用大约五行替换它( .htaccess)。

    希望对您有所帮助。

    【讨论】:

    • 我无法重写 URL 结构。由于供应商不允许我这样做。谢谢斯普德利。
    • @QLui:这真是太可惜了,因为这将是一种更好的方法。你确定吗?现在这是一件很常见的事情,许多常见的软件包都依赖 mod_rewrite 来获取它们友好的 URL(Drupal、Wordpress 等),所以我希望任何半体面的托管供应商都允许你这样做.因此,如果您的主机供应商不允许您使用 mod_rewrite,那么我会说您使用了错误的网络主机!是时候找到更好的人了。
    • 如果每次页面加载都运行这个函数,会不会拖慢速度?
    • 如果你写得好,就不会。见stackoverflow.com/questions/26559/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2020-09-09
    相关资源
    最近更新 更多