readdir和scandir

时间:2010-08-23 04:32:36

标签: php

在我的localhost机器上,我有两个文件:

IMG_9029_измен.размер.jpgsłońce32 opalenier1.jpg

我希望通过 scandir()或readdir()获取主题的文件名,但无法获取精简文件名。它们是这样的:

IMG_9029_?????.??????.jpg  and slonce32 opalenier.jpg

Window XP SP3, php5.2.12 

如何获取IMG_9029_измен.размер.jpg and słońce32 opalenier1.jpg等文件名?

2 个答案:

答案 0 :(得分:8)

我假设你的php编码是utf-8。

$files = scandir($dirname);
foreach ($files as $file) {
    $filename = iconv ( "windows-1251" , "UTF-8", $file );
    echo $filename ."\n";
}

它应该适用于第一个文件,但我不知道哪个编码用于第二个文件。

主要问题是php 5不支持utf-8进行文件操作。它是内部ansi。所以它使用ansi api(只有8位编码)读取文件名。

答案 1 :(得分:1)

名称可能正确,但您需要将页面的编码设置为UTF-8。

将此添加到您网页的标题部分:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

然后将您的字符串转换为UTF8,以便正确显示特殊字符。

我做了一个功能,它被称为Encoding::toUTF8().

用法:

$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);

下载:

http://dl.dropbox.com/u/186012/PHP/forceUTF8.zip