PHP空白和特殊字符文件名错误

时间:2012-06-16 14:42:32

标签: php image utf-8 special-characters filenames

<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>

这是我的动态图库的代码示例。我使用另一个文件夹中的缩略图自动显示目录中的所有图像。这是我的问题:如果我在文件名中使用空白字符或特殊字符,则它根本不显示该文件。我想使用空白和特殊字符,如(ç,ö,ş),因为我想使用图像标题作为图像的描述,而不必编写任何额外的文本。知道怎么做吗?感谢。

示例:http://www.kursatkarabulut.com/galeriler/kopya.php

1 个答案:

答案 0 :(得分:1)

我承认我不知道在不同操作系统和文件系统上的文件名中有效且无效的所有字符,但我知道有些可能有问题,而且它取决于平台。我个人的建议是避免整个问题。

将文件元数据(在您的情况下,标题)存储在数据库中,然后将每个标题与某个序列号文件(如159.jpg)相关联,或者考虑将文件名编码为ascii的一小部分,由urlencode()

产生

例如,将ç.jpg存储为%C3%A7.jpg,然后将urlDecode()存储为显示...

注意命中最大文件名,以及可能的文件路径长度。它们因平台而异。这是使用数据库的另一点,因为它避免了长文件名。