0

我有一个模拟目录结构的 PHP 树类。我想实现一个使用$_GET任意数量参数的函数,如果参数与树结构的目录标题一致,那么该目录就是网站上显示的初始目录。例如,如果有人写道:

.../index.php?dir1=Foo&dir2=Bar

然后它将在树的根中搜索名为 的孩子Foo,然后Foo在 的孩子中搜索名为 的孩子Bar,依此类推。在旁注中,对我来说dir1/dir2是什么并不重要,它们可以是任何东西,我只对这些索引指向的内容感兴趣。

那么我的问题是:

  • 树中的某些标题包含可能对 URL 不友好的字符,如空格.、 或 HTML 代码(如’)。这有限制吗,应该写一个转换函数来做我的比较?
  • dir1忽略索引名称(如)并仅检查它们指向的内容(如)的最佳方法是什么Foo

编辑:一个更具体的例子可以有人写:.../index.php?dir1=Web Work&dir2=awebsite.com

4

2 回答 2

1

特殊字符应采用百分比编码。PHP 会在填写$_GET.

您可以使用foreach($_GET as $dirname). 这只会逐步遍历值,而忽略键。

$curlevel = $tree;
foreach ($_GET as $dirname) {
  $found = false;
  foreach ($curlevel->children as $child) {
    if ($child->name == $dirname) {
      $curlevel = $child;
      $found = true;
      break;
    }
  }
  if (!$found) {
    // default to index page
  }
}
于 2013-07-05T08:22:58.967 回答
1

有类似 URL 编码的东西。您的网络服务器和 PHP 会为您处理解码。

看看这个功能: http: //php.net/manual/en/function.urlencode.php

正如@Barmar 建议的那样,要循环浏览这些项目,您可以使用foreach($_GET as $arg=>$dirname). 这将只是逐步遍历这些值,其中的键位于$arg.

此外,请注意让用户输入任意路径。

于 2013-07-05T08:22:28.607 回答