我有一个url,看起来像
http://example.com/index.php?id=111&title=word1 word2 word3
在使用curl请求url之前,我需要对空格进行编码。
但是如何对url的正确部分进行url编码。
urlencode
和rawurlencode
对https
的斜线、问号等进行编码。
您可以使用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;
}