Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с русским именем файла в скрипте

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Возникает эксепшн с русским именем файла в мультизагрузчике
Uchkuma
Отправлено: 29 Июля, 2010 - 15:22:29
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Ставлю в админку мультизагрузчик на AJAX. Прикрутил - все работает отлично! Пока не попробовал загрузить файл с русским именем. =(
В момент, когда при загрузке до него доходит очередь, сценарий останавливается. В консоли нахожу следующую ошибку:
Цитата:
Ошибка: uncaught exception: [Exception... "String contains an invalid character" code: "5" nsresult: "0x80530005 (NS_ERROR_DOM_INVALID_CHARACTER_ERR)" location: " ... "]

Вот фрагмент javascript-кода, при выполнении которого происходит ошибка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(handler.file.getAsBinary){
  2. var boundary="AjaxUploadBoundary"+(new Date).getTime();
  3. xhr.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);
  4. xhr[xhr.sendAsBinary ? "sendAsBinary":"send"](multipart(boundary,handler.name,handler.file))
  5. }
ошибка возникает в 4 строке.

Вот еще:
CODE (htmlphp):
скопировать код в буфер обмена
  1. var multipart = function(boundary, name, file){
  2. return  "--".concat(
  3. boundary, CRLF,
  4. 'Content-Disposition: form-data; name="', name, '"; filename="', file.fileName, '"', CRLF,
  5. "Content-Type: application/octet-stream", CRLF,
  6. CRLF,
  7. file.getAsBinary(), CRLF,
  8. "--", boundary, "--", CRLF
  9. );
  10. }


Используемая кодировка windows-1251.

Помогите разобраться, друзья-товарищи!
(Добавление)
Выяснилось, что эта проблема возникает только в FF.
(Добавление)
Впрочем и сам кусок кода выполняется только в FF.

(Отредактировано автором: 29 Июля, 2010 - 16:57:45)

 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 16:51:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Uchkuma пишет:
Используемая кодировка windows-1251.

Тут в теме рядом кто-то сказал что Ajax работает только с utf-8... Хмммммм.......
 
 Top
Uchkuma
Отправлено: 29 Июля, 2010 - 17:05:58
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




В других браузерах работает. Правда используется несколько другой метод, но тоже на AJAX. Chrome срабатывает без ошибок, но тоже есть проблема с кодировкой - коверкает русские имена.
(Добавление)
Может сначала закодировать строку с именем, а в обработчике уже раскодировать? Какие в javascript есть функции кодирования?
 
 Top
JustUserR
Отправлено: 01 Августа, 2010 - 01:27:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Uchkuma пишет:
Может сначала закодировать строку с именем, а в обработчике уже раскодировать? Какие в javascript есть функции кодирования?
Кодовая страница в которой происходит внутреннее представление данных используемых в JS-скрипте - зависит как от кодировки в которой сохранена или получена HTML-страница так и от настраиваемых параметров локали В расшифровке приведенной вами ошибки говорится о том что имя DOM-объекта не может содержать недопустимые символы - и действительно несмотря на то что ключ ассоциативного массива записанный в квадратных скобках может содержать любые символы которые может содержать строка с учетом уровня экранирования - но свойства объекта при точечной форме обращения могут содержать ограниченное число
Таким образом можно попробовать несколько вариантов решений например проэкранировать строку с именем файлами - или произвести с ней urlencode-шифрования оставив тем самым в ней только допустимые ASCII-символы - в этом случае вы можете использовать встроенную в JS функцию encodeURIComponent


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB