【问题标题】:PHP blank and special characters error of filenames文件名的PHP空白和特殊字符错误
【发布时间】:2012-06-16 14:42:32
【问题描述】:
<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

【问题讨论】:

  • 对不起,我不得不删除我的答案,因为我没有时间修复它。无论如何:编码您的 HTML 输出并引用您的背景 URL。

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


【解决方案1】:

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

要么将文件元数据(在您的情况下为标题)存储在数据库中,然后将每个标题与某个序列号文件(如159.jpg)相关联,要么考虑将文件名编码为 ascii 的一个小子集,如产生by urlencode()

例如,将ç.jpg urlencoded 存储为%C3%A7.jpg,然后只使用urlDecode() 进行显示...

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

【讨论】:

  • 是的,尝试使用基本上未过滤的文件名文本似乎有风险。它将被编码,但不会被过滤。听起来像是等待发生的安全风险或错误。序列号更干净、更安全。
  • 我现在对数据库太不了解了。我需要对此进行研究。
  • 当心base64_encode,因为它的一个字符(/)在所有主要操作系统中都是无效的。
  • @AlixAxel,哦...哇,我从来不知道 / 是 base64 字母表的一部分。已编辑。
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2021-01-19
  • 2014-04-17
  • 2015-02-09
  • 2012-08-27
  • 2012-07-01
相关资源
最近更新 更多