Почему Internet Explorer отклоняет мое имя файла с пробелами?

У меня есть куча файлов PDF с пробелами в имени, которые отображаются в iFrame, а также в новом окне с помощью window.open (не одновременно).

Оба работают нормально во всем, кроме IE8, который выдает ошибку «файл не найден». Удалите пробелы, и они отлично работают в IE8.

Мне нужно сохранить пробелы в именах файлов, поэтому я попытался использовать escape (filename); который заменяет пробелы с помощью клавиши выхода% 20. Это тоже не работает.

Я пробовал все, что мог придумать или мог бы Google, чтобы IE8 принимал пробелы, но ничего не работает.

Какие-либо предложения? Я могу удалить пробелы для тестирования, но в реальном мире удаление пробелов из имен файлов pdf в файловой системе в настоящее время не вариант.

Вот код, с которым я работаю

var file = "pdfs/this file name has spaces.pdf";
file = escape(file);  //this does not fix the problem

//to display in a new window or tab...
window.open(file);

//to display in my iFrame...
$('.viewer .ifrm').attr('src', file);

Спасибо.


person user278859    schedule 05.06.2012    source источник
comment
покажите код (и начните получать ответы) :)   -  person Rune FS    schedule 05.06.2012
comment
Как вы показываете pdf? Также вы декодируете имя файла, прежде чем пытаться его отобразить?   -  person Josh Mein    schedule 05.06.2012
comment
Я добавил код, который использую для этого, в свой вопрос. Джош, что ты имеешь в виду под декодированием? Я использую функцию escape, чтобы заменить пробелы клавишами выхода. Это то, что вы имели ввиду?   -  person user278859    schedule 05.06.2012
comment
Вы пробовали кодировать пробелы как +?   -  person uınbɐɥs    schedule 06.06.2012
comment
Шакин - Вы хотите заменить пробелы% 2B ссылкой на кодировку URL для символа +?   -  person user278859    schedule 06.06.2012
comment
Я имею в виду заменить пробелы на +, например. file = file.replace(/ /g, '+');. Это работает? Кроме того, можете ли вы воспроизвести проблему в jsFiddle? Вам нужно будет изменить file на абсолютный путь к вашему веб-серверу, чтобы он работал в jsFiddle.   -  person uınbɐɥs    schedule 10.07.2012


Ответы (1)


Используйте encodeURI вместо escape

person johnlemon    schedule 05.06.2012
comment
Я пробовал, но не получается. Я пробовал вот так ... var file = 'file name.pdf'. Вы это имели в виду? - person user278859; 05.06.2012
comment
encodeURI () делает то же самое, что и escape (), заменяя пробелы на% 20. Работает на всем, кроме IE8. Пока единственный способ заставить его работать - это удалить все пробелы. - person user278859; 05.06.2012
comment
вы пробовали использовать локальный сервер или открывали файл html + js прямо в браузере? - person johnlemon; 05.06.2012
comment
На самом деле тестирую разные способы. Локально в Safari, Firefox, Chrome в Mac OS и IE8 в виртуальной машине XP (слияние) с локальным обслуживанием сайта на Mac. У меня также есть сайт на сервере Win 2008 (windows box) за пределами сайта. Я также тестирую браузеры, расположенные на удаленном компьютере с Windows, который подключается к обоим сайтам. IE8 не работает во всех случаях. - person user278859; 05.06.2012
comment
Забыл упомянуть, что сайт Mac обслуживается с использованием внешнего IP-адреса Mac. Сервер Win 2008 - это сервер домена. Не уверен, что у меня здесь правильная терминология ... для доступа к серверу Mac мы используем xxx.xxx.xxx/misite/index.html на сервере Win2008 fubar.com/mysite/index.html. - person user278859; 05.06.2012