PHP读取和呈现文件名(带有特殊字符)以供下载

时间:2019-01-20 09:55:34

标签: php utf-8 special-characters

我必须呈现文件列表及其链接。我写了什么:

$path = "pdf/".$lang."/*";
$fileList = glob($path);

echo "<ul>";
foreach($fileList as $filename){
    $splitted = explode("/", $filename);
    echo '<li><a href="'.$filename.'">'.end($splitted).'</a>'; 
}
echo "</ul>";

如果文件名中没有特殊字符,则可以使用。如果存在,将呈现�。

我更改了以下代码:

$path = "pdf/".$lang."/";
$fileList = glob($path."*");

echo "<ul>";
foreach($fileList as $entry){
    $splitted = explode("/", $entry);
    $filename = iconv('WINDOWS-1252', 'UTF-8', end($splitted));
    echo '<li><a href="'.$path.$filename.'" target="_blank">'.$filename.'</a>'; 
}
echo "</ul>";

此解决方案仅适用于本地主机。一旦发布,特殊字符将无法正确呈现。代替ä,它呈现ä。 我该怎么解决?

编辑:
这不是this问题的重复项。正如我在上面所写的那样,我得到了“不”。

Localhost和服务器在Windows上运行。 本地主机上的PHP版本是5.6.35。服务器安装在7.1。

2 个答案:

答案 0 :(得分:0)

看起来文件名然后用UTF-8编码了两次-您在服务器/本地php上使用什么编码设置?

答案 1 :(得分:0)

我不确定,但这可能是服务器上的文件已编码为ISO-8859-1而不是utf-8。

请参阅以下问题作为参考: Swedish characters and UTF-8

我就这个问题写了一个答案,这是第二个答案。

尝试将字符集元标记更改为ISO-8859-1