php用参数中的空格对完整url进行编码


php encode full url with spaces in arguments

我有一个url,看起来像

http://example.com/index.php?id=111&title=word1 word2 word3

在使用curl请求url之前,我需要对空格进行编码。

但是如何对url的正确部分进行url编码。

urlencoderawurlencodehttps的斜线、问号等进行编码。

您可以使用parse_url()将url拆分为相应的部分。对parse_url返回的数组中的query元素使用urlencode(),然后使用http_build_url将其重新组合在一起。

注:http_build_url需要PECL PECL_http>=0.2.1

将空格替换为"+"。

正如@F21所说,。。。

function fixUrlEncoding(string $url){
    $scheme = parse_url($url, PHP_URL_SCHEME);
    $host   = parse_url($url, PHP_URL_HOST);
    $path   = parse_url($url, PHP_URL_PATH);
    $query  = parse_url($url, PHP_URL_QUERY);
    $f = explode('?', $query,2);
    $file  = $f[0];
    $query = $f[1];
    $ini   = $scheme . '://' . $host . $path ;
    // fix encoding
    parse_str($query, $result);
    foreach ($result as $k => $val){
        $result[$k] = urlencode($val);
    }
    $query = $file . '?' . http_build_query($result);
    if (!Strings::startsWith('http', $url)){
        $url = $ini . '?' . $query;
    } else {
        $url = substr($url, strlen($ini)) . '?' . $query;
        $url = $ini . '?' . $query;
    }
    return $url;
}