在PHP中清理或修剪URL并返回数组

时间:2017-08-09 12:00:40

标签: php arrays url trim sanitize

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

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

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

  

主页/索引/页

进入

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

我已阅读有关rtrimfilter_sanitize_urlexplode的内容,但我不知道为什么上面的代码包含了所有这三个代码。 不会消毒字符串自动修剪'/'字符?因此,没有必要修剪'/',而只修剪空格......(?)

此外,如果爆炸范围也是'/',如果假设'/'被trim和sanitize_url删除,它如何仍然识别数组“开始和结束”的位置?

如果我简单地省略rtrim charlist'/',这样可以吗?它仍然有效,我尝试过。

我很困惑,我可能会混淆概念,我会很感激。

1 个答案:

答案 0 :(得分:1)

...如果爆炸范围也是' /',它如何仍然识别数组"开始和结束的位置"如果' /'据说被trim和sanitize_url删除了?

爆炸仍然可以使用' /'作为分隔符,因为FILTER_SANITIZE_URL没有定位' /'作为要删除的字符,rtrim仅删除作为网址中最后一个字符存在的斜杠。 FILTER_SANITIZE_URL有一个完整的字符列表,它从字符串中删除,但它确实以非ASCII字符为目标,而其他此类字符则不属于网址。正斜杠字符确实属于url,用于指定路径,因此不会在此处删除。 rtrim确实删除了指定的正斜杠字符,但rtrim和删除所有匹配字符之间存在差异。 rtrim完全正确修剪,这意味着会查看输入字符串的最右侧字符,如果根据目标字符找到匹配项,则会将其删除。因此,explode仍将按预期工作,因为所有内部' /'此过滤后,字符保持不变。