如何确定URL是否包含参数?

时间:2016-02-15 13:52:20

标签: php url routing

我有两种网址:

首先

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;

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

2 个答案:

答案 0 :(得分:1)

您可以使用parse_url

$parsed = parse_url ( 'YourURL' );

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

答案 1 :(得分:0)

这是一个可能的实现:

<?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"