PHP,文件上传到标题中带有“空格”的目录


php, file upload to directory with "spaces" in title?

我在尝试将文件上传到目录中时使用此代码:

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

只要$playlist变量是单个字符串(没有空格),它就可以正常工作

但是当变量$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)

这有意义吗?请帮忙....

将空格更改为破折号怎么样?

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

如果它是URL的一部分,我更喜欢小写字母,所以

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

基于黑豹的建议。我不得不使用

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

所以实际上,当用户创建新的播放列表时,空格会替换为破折号 (-),同样,当播放列表显示在用户端时,我做相反的事情,用空格替换破折号,以便它正确显示

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

这解决了问题,上传不必处理可怕的空间。