-1

ディレクトリのファイルの内容をリストに表示するPHPコードがあります。各ファイルはリンクされているため、クリックするとダウンロードまたは開くことができます。ディレクトリ内のファイルは、顧客によってアップロードされたファイルになります。ファイル名にスペースが含まれていると、リンクが壊れて開かないので、スペースをアンダースコアに置き換えたいと思います。

str_replaceが私が探していることを実行することは知っていますが、それをこのコード(私が作成しなかったもの)に適用する方法がわかりません。

// Define the full path to your folder from root 
$path = "uploads/artwork"; 


// Open the folder 
$dir_handle = @opendir($path) or die("Unable to open $path"); 

// Loop through the files 
while ($file = readdir($dir_handle)) { 

if($file == "." || $file == ".." || $file == "index.php" ) 

    continue; 
    echo "<a href=uploads/artwork/$file>$file</a><br />"; 

} 
// Close 
closedir($dir_handle); 

すべての助けは大歓迎です。ありがとうございました!

4

1 に答える 1

5

ファイル名をサーバーに保存するときにも、ファイル名をアンダースコアに置き換える必要があります。

ファイルを保存する場所にコードがないためurlencode()、危険な文字で壊れないように URL をリンクできます。hrefここで行っている引用符で囲まれた値がなかったため、最初はスペースで区切られていたことに注意してください。

echo "<a href='" . urlencode("uploads/artwork/$file") . "'>$file</a><br />";

それ以外の場合、スペースをアンダースコアに置き換えるには、次のようにします。

echo "<a href=" . str_replace( ' ', "_", "uploads/artwork/$file") . ">$file</a><br />";

ただし、アップロード時にファイル名を変更する必要がある可能性があります。

htmlentities()そのリンクの$file部分でも呼び出す必要があることに注意してください。これにより、文字<が HTML ページを分割するのを防ぐことができます。したがって、最終結果は次のようになります。

echo "<a href='" . urlencode("uploads/artwork/$file") . "'>" . htmlentities( $file) . "</a><br />";
于 2012-11-07T17:41:05.920 に答える