2015-01-06 2 views
1

Я использую этот код при попытке загрузить файл в каталог:php, загрузка файла в каталог с пробелами в заголовке?

if(move_uploaded_file($_FILES['upl']['tmp_name'], '../'.$acct_id.'/music/'.$playlist.'/'.$_FILES['upl']['name'])){ 
echo '{"status":"success"}'; 
exit; 
} 

Он отлично работает до тех пор, как переменные $ списков воспроизведения одной строку (без пробелов)

Но когда переменная $playlist что-то вроде "Greatest Hits" с пробелом между двумя словами, код не будет работать?

Я сделал попробуйте добавить rawurlencode($playlist) как предложил другу, но все-таки не повезло:

if(move_uploaded_file($_FILES['upl']['tmp_name'], '../'.$acct_id.'/music/'.rawurlencode($playlist).'/'.$_FILES['upl']['name'])){ 
echo '{"status":"success"}'; 
exit; 
} 

Я попытаюсь объяснить по-другому.

Проблема в строке связана с переменной $playlist, а не с именем файла.

Мне кажется, что ваше предложение помещает "rawurldecode" на имя загружаемого файла.

Файлы, которые я загружаю, имеют пробелы, и они работают нормально, пока $playlist не имеет пробелов, поэтому проблема связана с заголовком каталога, который помещается внутри $playlist.

Я попытался:

- htmlentities($playlist) 
- urlencode($playlist) 
- urldecode($playlist) 
- rawurlencode($playlist) 
- rawurldecode($playlist) 

ли это смысл? Пожалуйста, помогите ....

+0

Удалите пространство с тире (-) или оцените (_), поскольку браузеры не поддерживают пространство в URL-адресе. –

+0

Пользователи создают имена каталогов (например, «Greatest Hits» «Hits of the 1980s» и т. Д.). Это проблема UX, и я не могу требовать от пользователей создавать имена плейлистов без пробелов ... – NetTemple

+0

Имена файлов имеют пробелы, и они загружаются, а именно строка $ playlist, вызывающая проблему. – NetTemple

ответ

3

Как насчет смены пространств на тире?

$playlist = str_replace(' ', '-', $playlist); 

Если это часть URL, я предпочитаю там маленькие буквы, так

$playlist = strtolower(str_replace(' ', '-', $playlist)); 
+0

Именно это я и предлагаю .. Вы очень быстро .. –

+0

Итак, когда пользователь создает новый плейлист, вы предлагаете заменить пробелы (так что «Greatest Hits» становится «Greatest Hits»). Если это так, когда пользователь фактически отображает список «Плейлисты», могу ли я отобразить их обратно к оригиналу? Каким-то образом реверсирование процесса (т. Е. Заменить «-» на пробелы). Как проблема UX, я могу иметь каталоги на бэкэнд под названием, как вы предлагаете, но они должны быть более удобными для пользователя на передней панели. – NetTemple

+0

То же самое с нижним регистром - я могу сделать это на сервере, но когда они отображаются на интерфейсе, они должны быть выше и ниже. – NetTemple

0

на основе предположения Пантеры. Я должен был использовать

$playlist = str_replace('-', ' ', $playlist); 

так в действительности, когда пользователь создает новый список воспроизведения, пробелы заменяются с тире (-) и также, когда список воспроизведения отображается на стороне пользователя, я наоборот и заменить из тира с пробелами, чтобы он отображал правильно

$playlist = str_replace(' ', '-', $playlist); 

Это решило проблему и загрузка не приходится иметь дело с страшными пространствами.

+0

Благодарим вас за помощь и предложения! – NetTemple

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