以下代码用于按字母顺序列出目录的每个文件和文件夹,并且它几乎可以正常工作。
<?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和目标没有打开,而没有奇怪特征的链接完全可以运作。
你能告诉我如何解决这个问题吗?
答案 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>";
}
?>
就是这样。我希望它有一些用处。