【问题标题】:readdir and scandirreaddir 和 scandir
【发布时间】:2010-08-23 04:32:36
【问题描述】:

在我的本地主机上,我有两个文件:

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 这样的文件名?

【问题讨论】:

标签: php


【解决方案1】:

我假设你的 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 位编码)。

【讨论】:

    【解决方案2】:

    名称可能是正确的,但您需要将页面的编码设置为 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

    【讨论】:

    • 感谢建议。当我使用 readdir() 或 scandir() 时,文件名已更改为 IMG_9029_?????.??????.jpg。如何用这个名字编码。我认为这是不可能的
    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2013-08-19
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多