Я вижу это примечание в комментариях к rawurlencode
на php.net:
phpversion ()> = 5.3 будет соответствовать RFC 3986, тогда как phpversion ()<= 5.2.7RC1 не соответствует RFC 3986. </p>
История связанных RFC:
RFC 1738, раздел 2.2, только буквенно-цифровые символы, специальные символы "$ -_. +! * '(), ", и зарезервированные символы, используемые для их зарезервированных целей, могут использоваться без кодирования в URL.
RFC 2396, раздел 2.3, unreserved = alphanum |mark mark = "-" |"_" |""|"!"|"~" |"*" |"'" |"(" | ")"
RFC 2732, раздел 3 (3) Добавьте "[" и "]" к набору "зарезервированных" символов:
RFC 3986, раздел 2.3, не зарезервировано = ALPHA/ DIGIT / "-" / "."/ "_" / "~"
RFC 3987, раздел 2.2, не зарезервировано = 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);