PHP,$ _GET不友好的URL字符并忽略索引名称

时间:2013-07-05 08:18:39

标签: php get tree

我有一个模拟目录结构的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

2 个答案:

答案 0 :(得分:1)

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

查看此功能:http://php.net/manual/en/function.urlencode.php

要循环浏览项目,正如@Barmar建议的那样,您可以使用foreach($_GET as $arg=>$dirname)。这将使用$arg中的键来逐步执行值。

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

答案 1 :(得分:1)

特殊字符应为percent-encoded。在填写$_GET之前,PHP将负责解码它们。

您可以使用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
  }
}