0

可能只是一些小东西,但我正在使用下面的代码来读取目录中的文件并将它们打印为自身的超链接。

它会打印出完整的文件名,但它会创建一个不完整的超链接,只使用直到第一个空格的字符。问题是如何为包含空格的文件创建功能超链接?

$dir = '.';
$dh = opendir($dir);
$file_count = 0;
while (false !== ($file = readdir($dh))) {
    $files[] = $file;
    $file_count += 1;
    echo $file;
}
for ($x = 0; $x < $file_count; $x += 1) {
    echo "<a href=$files[$x]>" . "$files[$x]" . "</a><br>";
}
4

4 回答 4

2
$dir = '.';
$dh = dir($dir);
while (FALSE !== ($file = $dh->read())) 
{
    if ('.' !== $file[0]) // ignore any entry that begins with a '.'
        echo "<a href='" . urlencode($file) . "'>". $file . "</a><br />\n";
}
$dh->close();
于 2013-01-04T23:14:58.570 回答
2

我已经在上面的评论中建议了urlencodeand的用法。htmlspecialchars

我还建议您使用,FilesystemIterator因为在您的情况下使用它非常方便:

$dir = '.';
$files = new FilesystemIterator($dir);

foreach ($files as $path => $fileinfo) {
    $name  = $fileinfo->getBasename();
    $url   = urlencode($name);
    $label = htmlspecialchars($name);
    printf("<a href=\"%s\">%s</a><br>\n", $url, $label);
}
于 2013-01-04T23:17:52.053 回答
1

尝试使用glob();

foreach (glob("*.*") as $filename) {
        echo "<a href=\"$filename\">$filename</a> <br>";
}

您可以通过扩展名指定,或者我指定的内容*.*将在它们自己的超链接上显示所有文件。

于 2013-01-04T23:12:59.657 回答
0

您可能希望在锚标记内的 HREF 属性中添加引号:

 echo "<a href='$files[$x]'>$files[$x]</a><br>";

客户可能会认为空格后面的文件名部分是另一个属性。(您可能还想使用 htmlentities() 来转义 href 属性中的文件名。)

于 2013-01-04T23:11:36.127 回答