在 OS-X(PHP5.2.11)上,我有一个文件:siësta.doc(以及其他数千个带有 Unicode 文件名的文件),我想将文件名转换为网络可消费格式(a-zA-Z0-9.)。如果我硬编码上面的文件名,我可以进行正确的转换:
<?php
$file = 'siësta.doc';
echo preg_replace("/[^a-zA-Z0-9.]/u", '_', $file);
// Output: si_sta.doc
?>
但是如果我用 scandir 读取文件名,我会得到奇怪的转换:
<?php
$files = scandir(DIRNAME);
foreach ($files as $file) {
echo preg_replace("/[^a-zA-Z0-9.]/u", '_', $file);
// Output for the file above: sie_sta.doc
}
?>
我试图检测编码,设置编码,用 iconv 函数转换它。我也尝试了 mb_ 功能。但情况更糟。我做错什么了?
提前致谢