列出包含不寻常字符的目录内容


Listing directory contents with unusual characters file names

下面的代码是按照字母顺序列出目录中的每个文件和文件夹,它工作得很好…几乎.

<?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

那么,这里是最后的PHP编程,用于列出文件名中含有不寻常字符(例如ê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>";
    }
?>

就是这样。