OS-X (PHP5.2.11) には、siësta.doc (および Unicode ファイル名を持つ他の千のファイル) というファイルがあり、ファイル名を Web で使用できる形式 (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_ 関数も試しました。しかし、それはただもっとひどかった。私は何を間違えましたか?
前もって感謝します