Согласно RFC, в multipart/form-data поле имени файла заголовка довольного расположения получает как параметр HTTP, который заключенная в кавычки строка - представляет в виде строки между выходами, где символ '\' может выйти из любого другого символа ASCII.
Проблема, веб-браузеры не делают этого.
IE6 отправляет:
Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"
Вместо ожидаемого
Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"
Который должен быть проанализирован как z:tmptest.txt
согласно правилам вместо z:\tmp\test.txt
.
Firefox, Konqueror и Chrome не выходят "из символов, например:
Content-Disposition: form-data; name="file"; filename=""test".txt"
Вместо ожидаемого
Content-Disposition: form-data; name="file"; filename="\"test\".txt"
Так..., как Вы предложили бы заниматься этой проблемой?
У Кого-либо есть идея?
Есть ли причина, по которой вам вообще нужно разбирать это имя файла?
По крайней мере, единственная последовательная вещь заключается в том, что часть заголовка filename
заканчивается двойной кавычкой, поэтому вам просто нужно прочитать все между filename=""
и final "
.
Затем вы можете рассматривать любой обратный слеш, кроме \\\
, \"
или \"
, как буквальный обратный слеш, если только вы не считаете особенно вероятным, что пользователи будут загружать имена файлов с табуляцией :)