PHP将REQUEST_URI解析为数组

OMG*_*sen 9 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]);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:语言

Sha*_*ngh 17

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

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

print_r($output);
Run Code Online (Sandbox Code Playgroud)

  • +1对于大多数人而言,可能比接受的答案更有用.相对于$ urlArr [0]中的根的路径以及带有路径,整个查询和$ output中单独查询参数的整齐数组.使用.htaccess可以很好地将非文件和非目录重定向到index.php或类似文件. (3认同)

mar*_*rio 7

没有安全问题,但您的解决方案非常繁琐.已经可以通过parse_str(以及parse_url分割路径)来实现这一点.或者在你的情况下:

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

  • 如果`REQUEST_URI` 不包含`?`,这会创建一个“通知” (2认同)