我看到在評論本說明爲rawurlencode
上php.net:
phpversion()> = 5.3將兼容RFC 3986,而 phpversion()< = 5.2.7RC1不符合RFC 3986.
歷史o ˚F相關的RFC:
RFC 1738第2.2節只有字母數字,特殊字符 「!$ -_ + *「()」,並用於其保留 目的的保留字符可以在URL中使用未編碼。
RFC 2396 section 2.3 unreserved = alphanum | mark mark =「 - 」 | 「_」| 「」 | 「!」 | 「〜」| 「*」| 「'」| 「(」 | 「)」
RFC 2732第3(3)添加 「[」 和 「]」 到該組 '保留' 字符:
RFC 3986第2.3節的未預留= ALPHA/DIGIT/「 - 」/「。」 /「_」/ 「〜」
RFC 3987 section 2.2 unreserved = ALPHA/DIGIT /「 - 」/「。」/「_」/ 「〜」
下面的代碼產生在5.3.2和5.2.15相同的輸出,但:
<? echo rawurlencode ("[hello]") . "\n\n"; ?>
%5Bhello%5D
你可以嘗試創建的S3.php
副本,並改變S3Request
修改$this->url
:
$this->uri = $uri !== '' ? '/'.str_replace('%2F', '/', rawurlencode($uri)) : '/';
$this->url = str_replace("%5B", "[", $this->url);
$this->url = str_replace("%5D", "]", $this->url);
你是不是忘記申請[URL編碼(http://php.net/manual/en/function.urlencode.php)? –
$ rest = new S3Request('GET',$ bucket,$ uri)這裏我需要應用URL Encode? – svk
nvm,它已經爲你''rawurlencode($ uri)' –