【问题标题】:Sanitize or trim URL and return array in PHP在 PHP 中清理或修剪 URL 并返回数组
【发布时间】:2017-08-09 12:00:39
【问题描述】:

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

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 '/' 可以吗?据我尝试,它仍然有效。

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

【问题讨论】:

标签: php arrays url trim sanitize


【解决方案1】:

...如果爆炸分隔符也是'/',如果'/'被trim和sanitize_url都删除,它如何识别数组“开始和结束”的位置?

Explode 仍然可以使用“/”作为分隔符,因为FILTER_SANITIZE_URL 不会将“/”作为要删除的字符,而rtrim 只会删除作为最后一个字符存在的斜杠。 FILTER_SANITIZE_URL 具有从字符串中剥离的完整字符列表,但它确实针对非 ASCII 字符以及其他不应属于 url 的此类字符。正斜杠字符确实属于 url,用于指定路径,因此这里不删除它。 rtrim 确实删除了指定的正斜杠字符,但 rtrim 和删除所有匹配字符之间存在差异。 rtrim 只是右修剪,意思是查看输入字符串的最右边的字符,如果根据目标字符找到匹配项,它将被删除。因此,explode 仍将按预期工作,因为在此过滤后所有内部“/”字符都保持不变。

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多