如何确定 URL 是否包含参数


How to determine whether the URL is containing argument(s)?

我有两种网址:

第一:

localhost/search?q=arg1&s=arg2

第二:

localhost/search/arg1/arg2

注意:有时参数包含? 。喜欢这个:

localhost/search/ar?g1/arg2   // this is belong to second kind

那么,我如何检测您的URL是哪种?

这是我的代码:

$FirstKind = strpos($_SERVER['REQUEST_URI'], '?') ? true : false;

但是,如果其中一个参数包含 ?,则上面的代码返回 URL 的true(如上面的注释所示(。

您可以使用parse_url来实现此目的:

$parsed = parse_url ( 'YourURL' );

GET"参数"现在处于$parsed['query']


  • 查看更多 关于 parse_url(( 的信息

这是一个可能的实现:

<?php
function getArg($arg, $url) {
    $result = '';
    $urlData = explode('&', parse_url($url)['query']);
    foreach ($urlData as $urlPair) {
        if (strpos($urlPair, '=') !== false) {
            list($k, $v) = explode('=', $urlPair);
            if (trim($k) == $arg) {
                $result = trim($v);
                break;
            }
        }
    }
    if (empty($result)) {
        $urlParts = explode('/', $url);
        for ($i = 0; $i < sizeof($urlParts); $i++) {
            if (trim($urlParts[$i]) == trim($arg)) {
                if (isset($urlParts[$i+1])) {
                    $result = $urlParts[$i+1];
                    break;
                }
            }
        }
    }
    return $result;
}

用法:

$url1 = 'localhost/search?q=arg1&s=arg2';
$url2 = 'localhost/search/ar?g1/arg2';
echo "<pre>";
var_dump(getArg('q', $url1));
var_dump(getArg('ar?g1', $url2));
echo "<pre>";

输出:

string(4) "arg1"
string(4) "arg2"