【问题标题】:Display images with spaces in the file name (php)显示文件名中带有空格的图像 (php)
【发布时间】:2017-03-23 21:56:32
【问题描述】:

我正在浏览img 文件夹中的图像,所有图像都显示得很好,除了名称中有空格的图像,例如“屏幕截图.png”。用户可以上传照片,他们的文件可能在文件名中有空格。在将图像保存到img 文件夹之前,我是否应该删除所有空格?或者有没有办法在图像文件路径中仍然显示带间距的图像?

function displayImage($row) {
                    $file_path = "img/" . $row['File_name'];
                    $image_title = $row['Title'];
                    echo "<br>" . $file_path;
                    echo "<li><img src=$file_path alt=$image_title>";
                    echo "<span class='info'><span>$image_title</span></span></li>";
                }

【问题讨论】:

  • src 值是否被引用?渲染出来的 HTML 是什么样子的?

标签: php html image file filepath


【解决方案1】:

使用rawurlencode()...

function displayImage($row) {
    $file_path = "img/" . rawurlencode($row['File_name']);
    $image_title = $row['Title'];
    echo "<br>" . $file_path;
    echo "<li><img src=$file_path alt=$image_title>";
    echo "<span class='info'><span>$image_title</span></span></li>";
}

【讨论】:

  • 我的强迫症说“也引用它!”
【解决方案2】:

您应该始终使用一些唯一的文件名重命名文件。例如,您可以将时间戳附加到文件名。通过这种方式,您可以生成不带空格的新文件名。您可以保存原始文件名以供显示。但不要以文件的原始名称将文件保存到服务器。这是因为用户可能会上传 2 张同名的图片来替换旧文件。

【讨论】:

  • 非常好。我什至没有想过要指出这一点。提供了一个为文件创建一些 UID 的好机会。如果需要,可以跟踪原始文件名和数据库中的任何其他元数据。
  • 好的。您能否接受您认为解决了您的问题的答案之一
【解决方案3】:

你想用rawurlencode*你的文件名(不是文件路径只是其中的name元素;如:

 $file_path = "img/" . urlencode($row['File_name']);

*> 使用 rawurlencode 因为它将空格编码为%20 而不是+ urlencode 会的。它还 more closely 符合 RFC。

但使用这些非 url 安全值不是一个好主意,最好在上传时重命名文件,例如:

$newFilename = preg_replace("/\h*/","_",$uploadedFile['name']);

\h 捕获任何水平空白字符
* 捕获它零次或多次(贪婪)
然后将它们替换为下划线_

【讨论】:

    【解决方案4】:

    这行得通吗?就像我评论的那样......看起来你只是没有引用路径/src 值。

    function displayImage($row) {
                        $file_path = "img/" . $row['File_name'];
                        $image_title = $row['Title'];
                        echo "<br>" . $file_path;
                        echo "<li><img src=\"{$file_path}\" alt=\"{$image_title}\">";
                        echo "<span class='info'><span>$image_title</span></span></li>";
                    }
    

    【讨论】:

      【解决方案5】:

      只需用它们的 url_encoded 值替换空格:%20

      在您的情况下,将函数的第一行替换为:

       $file_path = "img/" . str_replace(" ", '%20', $row['File_name']); 
      

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        相关资源
        最近更新 更多