2011-02-15 4 views
0

Я использую CodeIgniter, и у меня есть контроллер, который обрабатывает загрузки с помощью AJAX.CodeIgniter и params с квадратными скобками

Контроллер ожидает получить имя файла как paramater, поэтому мне нужно принять практически любой возможный символ в URL-адресе.

Мой JavaScript закодировать имя файла с помощью encodeURI(), поэтому файл с именем "My File [х] .avi" становится "Мой% 20file% 20% 5BX% 5D.mpg". Пока все хорошо.

Проблема возникает при приеме этого параметра в CodeIgniter. URL выглядит http://localhost/myproject/uploader/upload/My%20file%20%5BX%5D.avi

и заголовок контроллера:

function upload($param1='') { } 

Когда я печатаю $ param1 я получил:

string(8) "My_file_" 

Даже если я использую urldecode() остается такой же , Поэтому CodeIgniter ест закодированные квадратные скобки. Любая помощь?

Большое вам спасибо.

+0

любая причина, по которой вы используете (предположительно) GET для этого, а не POST? – Ross

+0

Потому что я использую Valums Ajax Upload (http://valums.com/ajax-upload/), которому необходимо отправить имя файла в качестве параметра в строке запроса. –

+0

Ваш пример неправильный для начала. encodeURI («Мой файл [x] .avi») == My% 20File% 20% 5Bx% 5D.avi –

ответ

1

Я думаю, что у вас $ config ['global_xss_filtering'] установлено значение true, и поэтому CI очищает vars. Если это так, вы можете либо установить его на false, либо настроить функцию ввода-> xss_clean.

+0

Umm, насколько я знаю, фильтрация XSS применяется только к $ _POST и файлам cookie. Мой параметр $ param1 является частью строки запроса (это даже не часть $ _GET). Спасибо за совет! http://codeigniter.com/user_guide/libraries/input.html –

+0

Вам нужно добавить еще несколько символов (например: [,%) в этот список в config. $ config ['allowed_uri_chars'] = 'a-z 0-9 ~%.: _ \ -'; И я больше не уверен, что на самом деле хранится как имя файла, оригинальное или одно со специальными символами. – shikhar

Смежные вопросы