下面的代码是按照字母顺序列出目录中的每个文件和文件夹,它工作得很好…几乎.
<?php
$files = array();
$dir = opendir('.');
while(false != ($file = readdir($dir))) {
if(($file != ".")and ($file != "..") and ($file != "index.php")) {
$files[] = $file;
}
}
natsort($files);
foreach($files as $file) {
echo("<li><a href='$file'>$file</a>");
}
?>
的情况是,我的文件和文件夹有一些奇怪的字符在他们的名字,如é, ï, être.htm, écouter.txt
,等等。当我点击上面代码列出的链接时,包含非Ascii字符的链接会导致错误404,目标不会打开,而没有奇怪字符的链接则完全可以运行。
试试这个
echo("<li><a href='".url_encode($file)."'>$file</a>");
你说空格是一个问题,但url_encode会使空格为%20,所以我不知道为什么你有一个问题
解决方案:
`echo("<li><a href='".rawurlencode($file)."'>$file</a>");`
RFC 3986 -空格替换为%20
我自己找到了解决方案,感谢«福布斯»。
在提取或获取文件的URL路径时(上面代码中的 $file
),我遵循两个步骤:使用 urlencode($file)
和 str_replace("+", "%20", $url)
。这样做的原因是 urlencode
非常适合为正确的URL编码更改不寻常的字符,但是该函数还将URL路径中的空格替换为加号(+)。因此,您需要使用 str_replace("+", "%20", $url)
来替换正确URL编码的每个加号: %20
。
être.txt, écouter.php, canción.mp3
)的文件夹的内容。
目录清单
<?php
$files = array();
$dir = opendir('.');
while(false != ($file = readdir($dir))) {
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
$files[] = $file;
}
}
natsort($files);
foreach($files as $file)
{
$url_1 = urlencode($file);
$url_2 = str_replace("+", "%20", $url_1);
echo "<li><a href='".$url_2."'>".$file."</a></li>";
}
?>
就是这样。