用Underscore替换Space,这样我就可以下载文件了。

时间:2013-02-11 13:25:26

标签: php mysql

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

 //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 个答案:

答案 0 :(得分: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>浏览器将withspaces解释为附加属性,而不是attr

的值的一部分

如果你确实选择了替换路线,那么你只需要寻找一个简单的str_replace调用:

$val = str_replace(' ', '_', $replaceMe);

答案 1 :(得分:0)

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

$name = str_replace(' ', '_', $photoLocation);

答案 2 :(得分:0)

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

你能做到的一种方法是编码文件名并将其保存在数据库的额外字段中。

例如

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

当显示在url中使用phtolocation并使显示路径到达照片位置时。

祝你好运,如果你需要完整的例子让我知道

答案 3 :(得分:-2)

str_replace()

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

或在你的情况下:

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

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