AWS энтузиаст, что я, я должен признать, что оригинальные архитекторы S3 сделали крайне неудачную ошибку, когда решили, что +
на пути URL-адреса должны интерпретироваться так, как если бы они были эквивалентны ASCII 0x20 («пробел»).
Символ +
несет этот смысл только в части строки запроса. На пути это should have been interpreted literally.
На пути правильно закодированного и интерпретируемого URL +
эквивалентен %2B
.
Существует, следовательно, надежный ответ на вопрос из-за фундаментального недостатка, который заставляет S3 неправильно обрабатывать правильные URL-адреса.
Учитывая, что, если URL-адрес примера использовался браузером, S3 предположил бы, что это были пробелы, ваши интересы, вероятно, будут лучше всего использоваться, не преобразовывая URL-адрес для использования %2B
, а скорее использовать его как есть в взаимодействие с S3 ... если практический опыт не предполагает, что исходный источник этих URL-адресов фактически взаимодействовал с S3 и действительно преобразовал их в %2B
, не сохраняя их для последующего использования с последовательной кодировкой, и в этом случае можно было бы аргументировать, что они будучи вам предоставлен неправильно, но вам, возможно, придется преобразовать их в любом случае по причинам, которые могут быть более политическими, чем технические.
Но, как вы уже подозреваете, ответ менее простой.
Вы можете попытаться получить URI информацию '$ _SERVER [ 'QUERY_STRING']' или '$ _SERVER [ 'REQUEST_URI']' – Dolbik
@Dolbik Данные передаются в виде 'JSON' вместе с запросом' Post' –
If вы 'urldecode()' имя файла из строки запроса, то все, что он выводит, будет тем, что вызывается именем файла. Он преобразует обратно '% 2B' в' + 'и' + 'в пробел. – Rasclatt