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