我正在浏览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>";
}
Use 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 张同名图像,以替换旧文件。
你想使用 rawurlencode
* 你的文件名(不是文件路径,只是其中的名称元素;如:
$file_path = "img/" . urlencode($row['File_name']);
*
> 使用原始urlencode,因为它会将空格编码为%20
,而不是+
urlencode 将执行的操作。它也更符合 RFC。
但是使用这些非 url 安全值不是一个好主意,最好在上传时重命名文件,例如:
$newFilename = preg_replace("/h*/","_",$uploadedFile['name']);
h
捕获任何水平空格字符
*
抓住它零次或多次(贪婪(
然后用下划线_
替换这些
这行得通吗? 就像我评论的那样...看起来您只是没有引用路径/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>";
}
只需将空格替换为它们的url_encoded值:%20
。
在您的情况下,将函数的第一行替换为:
$file_path = "img/" . str_replace(" ", '%20', $row['File_name']);