-1

ユーザーがファイルをアップロードできる Web サイトがあります。ファイルを別のページにアップロードすると、ユーザーはそのファイルをダウンロードできます。問題は、ファイル名にスペースが含まれている場合、ファイル名全体ではなく最初の作業のみが選択されることです。スペースを含むファイルをダウンロードする方法があるのか​​ 、それともファイル名にアンダースコアを追加してダウンロードできるようにするのが簡単なオプションなのか疑問に思っていました。

 //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 をエスケープする必要があり、次に HTML に埋め込むために URL をエスケープする必要があります。

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


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

実際に htmlspecialchars を必要とする (現実的な) 状況を考えるのは非常に難しいですが、パラノイア!

また、通常は、すべての属性値を引用符で囲むことをお勧めします。

実行すると:<tag attr=value with spaces>ブラウザはandを値の一部としてではなく、追加の属性として解釈withします。spacesattr


ただし、置換ルートを使用する場合は、単純な str_replace 呼び出しを探しているだけです。

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

セキュリティ上の問題がたくさんあるので、元の名前で画像を表示しないことをお勧めします。

uができる方法は、ファイル名をエンコードしてデータベースの追加フィールドに保存することです。

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

表示するときは、URLでphtolocationを使用し、写真の場所への表示ルートを作成します。

幸運を祈ります。完全な例が必要な場合はお知らせください

于 2013-02-11T13:37:03.417 に答える
0

テストしていませんが、このロジックは正しいようです。

$name = str_replace(' ', '_', $photoLocation);
于 2013-02-11T13:30:25.970 に答える
-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 に答える