如何在PHP中读取外来文件名?

如何在PHP中读取外来文件名?,php,encoding,utf-8,character-encoding,Php,Encoding,Utf 8,Character Encoding,我正在尝试使用PHP读取Windows文件夹,其中文件夹内容包含西班牙语名称的文件(例如Español.doc) 但是,文件名打印错误,在上述情况下为“Espan??ol.doc” 函数mb\u detect\u encoding($file)返回ASCII码,但不知何故没有显示。有没有快速解决这个问题的方法 我正在使用PHP 5.4.16、Windows 7 Home Premium Edition Service Pack 1、Apache/2.4.4和(Win32)OpenSSL/0.9.

我正在尝试使用PHP读取Windows文件夹,其中文件夹内容包含西班牙语名称的文件(例如Español.doc)

但是,文件名打印错误,在上述情况下为“Espan??ol.doc”

函数
mb\u detect\u encoding($file)
返回ASCII码,但不知何故没有显示。有没有快速解决这个问题的方法


我正在使用PHP 5.4.16、Windows 7 Home Premium Edition Service Pack 1、Apache/2.4.4和(Win32)OpenSSL/0.9.8y。

尝试将文件名转换为
cp1252
,如下所示:

if (file_exists(iconv('utf-8', 'cp1252', $utffilename)));

以下是我在5.3.x/Ubuntu控制台环境中尝试过的一些东西:

<?php

$file = 'Español.doc';
echo file_get_contents($file);

关于Shankar Damodaran(现已删除)的答案,也许它确实有效,但您看到错误消息的地方不支持UTF-8?您是在web环境中还是在控制台环境中?我正在使用php读取文件夹并回显其内容。不幸的是,一些文件名(和子文件夹名)包含以问号形式出现的西班牙语字符。这个线程似乎表明PHP无法读取UTF-8字符。请记住,post已经有五年的历史了——从那时起,UTF-8支持将发生巨大变化。请尝试在网页中回显“Español”-也许UTF-8文件名支持还可以,但由于网页的字符集,上述错误消息无法正确呈现。@halfer不幸的是,我认为这仍然是一个问题。我试着搞乱和设置标题('Content-Type:text/html;charset=UTF-8');以及3个不同的浏览器和更改编码,但无法使其工作。我还尝试了httpd.conf和php.ini中的设置mb_detect_encoding()报告返回的字符串为ASCII,但我认为它不是完整的UTF-8echo“Español”;正确显示Español。好啊!我认为这是Windows在UTF-16中存储文件名的方式以及PHP文件函数如何操作的问题。我在某个地方读到,我可以通过访问FAT表获得UTF-8文件名。还在研究。我尝试了Safari、Firefox和Chrome的UTF-8(和其他)编码,但没有任何乐趣。如果您从Windows获得文件名(例如使用
glob
或目录迭代器),那么可能使用
iconv
从UTF-16转换为UTF-8?我使用opendir和readdir获取文件夹/文件名,并尝试了iconv和mb\u convert\u编码($file,'utf-8','ISO-8859-1');mb_convert_编码($file,'utf-8','utf-16');没有乐趣:-(@iPad:OK,请用您的新尝试和新发现更新您的问题-也许这会吸引更多的答案。好主意!另外,说明一个显而易见的问题:您能从Windows切换出去吗?