-1

我有一个允许用户上传文件的网站。在另一个页面上上传文件时,用户可以下载该文件。问题是如果文件名中有空格,它只会选择第一个作品而不是整个文件名。我想知道有没有办法下载包含空格的文件,或者一个简单的选择可能是在文件名中添加下划线以便可以下载。

 //This is the directory where images will be saved 
 $target = "../images/avatars/"; 
 $target = $target . basename($_FILES['photoLocation']['name']);

// Check to see all fields have been completed
$photoLocation =($_FILES['photoLocation']['name']);

if (!empty($photoLocation))
{

    // Create an SQL query to add the comment
    $sql = "INSERT INTO tblPhotoUpload (photoLocation) VALUES ('$photoLocation')";



    // Connect to the database
    connect();

    // Run the query and store the result in a variable
    $result = mysql_query($sql) or die("Could not run query");


    //Writes the photo to the server 
    if(move_uploaded_file($_FILES['photoLocation']['tmp_name'], $target))

    // Close connection to the database
    mysql_close()

我正在显示这样的文件。

while($record = mysql_fetch_array( $result )) 
 { 
 ?> 

 <tr class="row">
    <td class="cell"><a href= http://xxxxxxxxxxxxxxxxxxxxxx.com/images/avatars/<?php         echo $record["photoLocation"];?>>Download</a> </td>
4

4 回答 4

2

当您使用 URL 时,您正在处理转义方案中的转义方案。特别是,您必须转义 URL 以成为 URL,然后您必须转义 URL 以将其嵌入 HTML:

$url = "http://somesite.tld/some/path/" . urlencode($filename);


echo '<a href="' . htmlspecialchars($url) . '">link</a>';

很难想象一个实际上需要 htmlspecialchars 的(现实的)情况,但是哇哦偏执狂!

哦,另外,直接引用所有属性值通常是个好主意。

当您这样做时:<tag attr=value with spaces>浏览器将with和解释spaces为附加属性,而不是值的一部分attr


但是,如果您确实采用了替换路线,那么您只是在寻找一个简单的 str_replace 调用:

$val = str_replace(' ', '_', $replaceMe);
于 2013-02-11T13:27:58.303 回答
0

尚未测试,但这个逻辑似乎是正确的。

$name = str_replace(' ', '_', $photoLocation);
于 2013-02-11T13:30:25.970 回答
0

我建议不要以原始名称显示图像,因为与此相关的安全问题很多。

您可以做到的一种方法是对文件名进行编码并将其保存在数据库的额外字段中。

例子

$sql = "INSERT INTO tblPhotoUpload (photoLocation,photourl) VALUES ('$photoLocation','".md5($photoLocation)."')";

并在显示时在 url 中使用 phtolocation 并将显示路由到照片位置。

祝你好运,如果你需要完整的例子,请告诉我

于 2013-02-11T13:37:03.417 回答
-2

str_replace()

$file= str_replace(' ','_',$file);

或者在你的情况下:

$target = $target . basename(str_replace(' ','_',$_FILES['photoLocation']['name']));

$photoLocation =(str_replace(' ','_',$_FILES['photoLocation']['name']));
于 2013-02-11T13:27:49.480 回答