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

上記のコメントで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 に答える
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 に答える
0

アンカー タグ内の HREF 属性に引用符を追加することができます。

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

クライアントは、スペースに続くファイル名の部分が別の属性であると考える場合があります。(また、href 属性内のファイル名をエスケープするために htmlentities() を使用することもできます。)

于 2013-01-04T23:11:36.127 に答える