PHP readdir与欧洲字符

ala*_*and 4 php readdir str-replace

我得到的图像文件在文件名中有捷克语字符(例如,ěščřžýáíé),我想重新命名它们而不需要重音符号,这样它们就更适合网络.我以为我可以使用一个简单的str_replace函数,但它似乎与文件数组的工作方式不同,它与字符串文字一样.

检查扩展后,我用readdir读取文件.

function readFiles($dir, $ext = false) {
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                if($ext){  
                    if(end(explode('.', $file)) == $ext) {
                        $f[] = $file;
                    }
                } else {
                    $f[] = $file;
                }
            }

            closedir($dh);
            return $f;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

$files = readFiles(".", "jpg");

$search = array('š','á','ž','í','?','é','?','?','ý','?',' ');
$replace = array('s','a','z','i','e','e','r','n','y','c','-');

$string = "?š?áýísdjksnalci sáš?ééalskcnkkjy+?éší";
$safe_string = str_replace($search, $replace, $string);

echo '<pre>';

foreach($files as $fl) {
    $safe_files[] = str_replace($search, $replace, $fl);
}

var_dump($files);
var_dump($safe_files);

var_dump($string);
var_dump($safe_string);

echo '</pre>';
Run Code Online (Sandbox Code Playgroud)

产量

array(6) {
  [0]=>
  string(21) "Hl?vka s listem01.jpg"
  [1]=>
  string(23) "Hl?vky v atelieru02.jpg"
  [2]=>
  string(17) "Jarn? v?hon03.jpg"
  [3]=>
  string(17) "Mlad? chmel04.jpg"
  [4]=>
  string(23) "Stavba chmelnice 05.jpg"
  [5]=>
  string(21) "Zimni chmelnice06.jpg"
}
array(6) {
  [0]=>
  string(21) "Hl?vka-s-listem01.jpg"
  [1]=>
  string(23) "Hl?vky-v-atelieru02.jpg"
  [2]=>
  string(17) "Jarn?-v?hon03.jpg"
  [3]=>
  string(17) "Mlad?-chmel04.jpg"
  [4]=>
  string(23) "Stavba-chmelnice-05.jpg"
  [5]=>
  string(21) "Zimni-chmelnice06.jpg"
}
string(53) "?š?áýísdjksnalci sáš?ééalskcnkkjy+?éší"
string(38) "cseayisdjksnalci-saseeealskcnkkjy+eesi"
Run Code Online (Sandbox Code Playgroud)

现在我正在运行WAMP,但跨平台工作的答案更好:)

Bal*_*usC 5

根据0xFFFD标记(在Firefox中显示为带有问号的钻石),您已经没有使用正确的编码(Unicode/UTF-8)读取它们.到目前为止,我发现了这个bug,它似乎是相关的.

这是关于它的另一个SO话题:带有日语文件名的php readdir问题

到目前为止,等到PHP6稳定然后再使用它.

与问题无关:Normalizer是摆脱变音符号的更好工具.