清理 trim URL 和 return 数组 PHP

Sanitize or trim URL and return array in PHP

我想解析一个URL。这是我从教程中获得的代码,所以我假设它是正确的:

public function parseUrl()
    {
        if(isset($_GET['url']))
        {
            return $url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
        }
    }

我正在使用 explode 到 return URL 字符串每个部分的数组,如下所示:

Home/index/page

进入

Array ( [0] => home [1] => index [2] => page )

我读过 rtrimfilter_sanitize_urlexplode,但我不知道为什么上面的代码包含所有这三个。 不会自动清理字符串 trim '/' 字符吗?因此,不需要 trim '/',只需要空格...(?)

此外,如果explode分隔符也是'/',如果'/'应该被trim和[=36=删除,它如何仍然识别数组"starts and ends"的位置]?

如果我只省略 rtrim charlist '/' 可以吗?据我所试,它仍然有效。

我很困惑,我可能混淆了概念,不胜感激。

...如果爆炸定界符也是“/”,它如何仍然识别数组 "starts and ends" 的位置,如果“/”应该被两个 trim 删除和 sanitize_url?

Explode 仍然可以使用“/”作为分隔符,因为 FILTER_SANITIZE_URL does not target '/' as a character to remove, and rtrim 只会删除 url 中作为最后一个字符存在的斜线。 FILTER_SANITIZE_URL 有一个从字符串中删除的完整字符列表,但它实际上针对的是非 ASCII 字符,以及其他不应属于 url 的此类字符。正斜杠字符确实属于 url,以指定路径,因此此处未将其删除。 rtrim 确实会按照指定删除正斜杠字符,但 rtrim 与删除所有匹配字符之间存在差异。 rtrim 完全是 right trim,这意味着查看输入字符串的最右边的字符,如果根据目标字符找到匹配项,它将被删除。因此,explode 仍将按预期工作,因为所有内部 '/' 字符在此过滤后都保持不变。