列出具有异常字符文件名的目录内容

时间:2016-09-03 01:51:27

标签: php

以下代码用于按字母顺序列出目录的每个文件和文件夹,并且它几乎可以正常工作。

<?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和目标没有打开,而没有奇怪特征的链接完全可以运作。

你能告诉我如何解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

试试这个

  echo("<li><a href='".url_encode($file)."'>$file</a>");

你说空格是一个问题,但是url_encode会让空间变成%20,所以我不确定你为什么会遇到问题

答案 1 :(得分:0)

解决方案:

`echo("<li><a href='".rawurlencode($file)."'>$file</a>");`

RFC 3986 - 空格已替换为%20

答案 2 :(得分:0)

自己找到解决方案并感谢«Forbs»。

在上面的代码中提取或获取文件的网址路径( $file )时,我执行了两个步骤: urlencode($file) str_replace("+", "%20", $url) 。原因是 urlencode 非常适合更改正常URL编码的异常字符,但此函数还会替换加号(+)的URL路径中的空格。因此,您需要使用 str_replace("+", "%20", $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>";
    }
?>

就是这样。我希望它有一些用处。