php编码带参数空格的完整url

时间:2012-03-29 09:15:37

标签: php urlencode

我有一个看起来像这样的网址

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

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

但是如何对网址的正确部分进行urlencode。

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

3 个答案:

答案 0 :(得分:5)

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

注意:http_build_url需要PECL pecl_http> = 0.21.0

答案 1 :(得分:0)

用“+”替换空格。

答案 2 :(得分:0)

正如@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;
}