2012-06-16 28 views
1
<div id="gallery"> 

<?php 

$directory = 'people'; 

$allowed_types=array('jpg','jpeg','gif','png'); 
$file_parts=array(); 
$ext=''; 
$title=''; 
$i=0; 


foreach (glob($directory.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE) as $file){ 
    if($file=='.' || $file == '..') continue; 
    $file_parts = explode('.',$file); 
    $ext = strtolower(array_pop($file_parts)); 
    $title = basename($file); 
    $title = htmlspecialchars($title); 
    echo ' 
    <div class="pic '.$nomargin.'" style="background:url(thumbs/'.$file.') no-repeat 50% 50%;"> 
    <a href="'.$file.'" title="whatever you want : '.$title.'" rel="pan1" target="_blank">'.$title.'</a> 
    </div>'; 
    $i++; 
} 



?> 
<div class="clear"></div> 
</div> 

這是我的動態圖像庫代碼示例。我用另一個文件夾的縮略圖自動顯示目錄中的所有圖像。這是我的問題:如果我在文件名中使用空字符或特殊字符,那麼它根本不顯示該文件。我想使用空白和特殊字符,如(ç,ö,ş),因爲我想使用圖像標題作爲圖像的描述,而不必編寫任何額外的文本。任何想法如何做到這一點?謝謝。PHP空白和特殊字符文件名錯誤

樣品:http://www.kursatkarabulut.com/galeriler/kopya.php

+0

對不起,我不得不刪除我的答案,因爲我沒有時間去修復它。無論如何:編碼你的HTML輸出並引用你的背景URL。 –

回答

1

我承認我不知道哪些是和無效在不同的操作系統和文件系統的文件名中的所有字符,但我知道,有些可能是有問題的,這它取決於平臺。我個人的建議是避免整個問題。

將文件元數據(在您的情況下,標題)存儲在數據庫中,然後將每個標題與一些序列編號的文件(如159.jpg)相關聯,或考慮將文件名編碼爲ascii的一小部分, urlencode()

例如,存儲ç.jpg那麼就urlDecode()url編碼爲%C3%A7.jpg和顯示...

小心碰到最大的文件名,並可能文件路徑長度。它們也因平臺而異。這是使用數據庫的另一點,因爲它避免了長文件名。

+0

是的,嘗試使用基本未經過濾的文件名稱似乎很冒險。它會被編碼,但不會被過濾。聽起來像是安全風險或等待發生的錯誤。序列號更清潔,更安全。 –

+0

我現在對數據庫的評價太差了。我需要研究這一點。 – showbiz

+0

提示'base64_encode'作爲其中一個字符('/')在所有主要操作系統中都是無效的。 –