PHP将REQUEST_URI解析为数组

时间:2011-04-01 12:59:23

标签: php regex

我正在将REQUEST_URI解析为数组。

现在我有以下代码:

private function load_url_vars()
{
    if (preg_match('/^.+\?(.+)$/', $_SERVER["REQUEST_URI"], $matches))
    {
        $varpairs = preg_split("/&/", $matches[1]);
        foreach ($varpairs as $varpair)
        {
            if (preg_match('/^([A-Za-z_]+)=(.*)$/', $varpair, $varmatch))
            {
                $this->urlvars[$varmatch[1]] = urldecode($varmatch[2]);
            }
        }
    }
}

这样做是否有任何安全问题?这是解析它的好方法吗?

编辑:语言

4 个答案:

答案 0 :(得分:14)

你也可以在内置函数中使用php。这将是一种有效的方式。

$urlArr=parse_url($_SERVER['REQUEST_URI']);
parse_str($urlArr['query'], $output);

print_r($output);

答案 1 :(得分:6)

没有安全问题,但您的解决方案非常繁琐。已经可以使用parse_str(和parse_url来完成分割路径)。或者只是在你的情况下:

list($path, $qs) = explode("?", $_SERVER["REQUEST_URI"], 2);
parse_str($qs, $this->urlvars);

答案 2 :(得分:1)

为什么不使用$_GET dictionary

答案 3 :(得分:1)

$the_array = explode('/', trim($_SERVER['REQUEST_URI'], '/'));