如何避免使用PHP cURL进行URL通配?

时间:2011-02-28 00:09:27

标签: php url curl format glob

我有一个网址(略有修改),如下所示:

https://ssl.site.com/certificate/123/moo.shoo?type=456&domain=$GH$%2fdodo%20[10%3a47%3a11%3a3316]

由于括号直接传递给PHP cURL,它不会像我想要的那样工作。

我设法在命令行中成功运行相同的URL,如下所示:

curl -g "https://ssl.site.com/certificate/123/moo.shoo?type=456&domain=$GH$%2fdodo%20[10%3a47%3a11%3a3316]"

我可以在PHP cURL中使用一个选项(类似于-g,用于禁用globbing)吗?如果没有,我应该如何编码或格式化我的URL,然后再将其传递给PHP cURL?

2 个答案:

答案 0 :(得分:1)

目前我正在使用它,它似乎有效

$urlReconstructed = str_replace(']', '%5D', str_replace('[', '%5B', $url));

答案 1 :(得分:0)

这似乎对我有用:

$urlParts = parse_url($url);    
parse_str($urlParts['query'], $queryParts);
$urlReconstructed = sprintf('%s://%s%s?', $urlParts['scheme'], $urlParts['host'], $urlParts['path']);

foreach ($queryParts as $key => $value)
{
  $urlReconstructed .= $key . "=" . urlencode($value);
}

echo $urlReconstructed;

感谢Pekka,将您的评论转换为答案。如果没有其他更好的答案弹出,我将奖励你正确的答案。