readdir和scandir

Cha*_*ron 7 php

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

IMG_9029_?????.??????.jpgs?o?ce32 opalenier1.jpg

我想通过scandir()或readdir()获取主题的文件名,但不能得到精简文件名.它们是这样的:

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

Window XP SP3, php5.2.12 
Run Code Online (Sandbox Code Playgroud)

我怎么能得到文件名IMG_9029_?????.??????.jpg and s?o?ce32 opalenier1.jpg

Tom*_*mas 8

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

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

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

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


Seb*_*oli 1

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

将其添加到页面的标题部分:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
Run Code Online (Sandbox Code Playgroud)

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

我做了一个函数来做到这一点,它被称为Encoding::toUTF8().

用法:

$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
Run Code Online (Sandbox Code Playgroud)

下载:

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