35240
MACの場合、  
ファイル名につけた濁点などが二文字と判断されてしまって、  
文字コードがおかしくなることがあるかと思います。

ですので、  
カガク.txt  
カガク.txt  
二つ同じファイルに見えるのですが、上は、ガが１文字、下が２文字  
などに判断されてしまって、検索などの際に問題が発生します。

そこで、全部一斉に、ファイル名の濁点を一文字に変換するスクリプトを作りたいのですが、  
どのようにしたら良いでしょうか？

ファイル名を1文字ずつ文字コードで表示

```

    $dir = ".";
    if (is_dir($dir)) {
       if ($dh = opendir($dir)) {
          while (($file = readdir($dh)) !== false) {
             for ($i = 0 ;$i < mb_strlen($file);$i++){
                 print mb_substr($file,$i,1);
                 printf("0x%x", ord(mb_substr($file,$i,1)));
                 //この辺りで処理すべきかと思うのですが。。。。
             } 
             print "\n";
           }
           closedir($dh);
       }
    }
    
```
CC BY-SA 3.0
2017-06-02T16:45:10.413
35232
2017-06-03T01:37:23.003
21183
question
php macos
MACにおける、濁点の１文字扱い、２文字扱いを直す方法
記載例で言うと、`$file`に対し、`iconv`関数で`UTF-8`文字列に変換するとよいかと思います。

```

    例
    while (($file = readdir($dh)) !== false) {
        $file_utf8 = iconv("UTF-8-MAC", "UTF-8", $file)
        print $file_utf8
        ...
    }
    
```

検索すると見つけられると思いますが、MacOSのファイルシステム(HFS+)では、濁音文字を  
通常文字と濁点の2つにして扱うらしいです。  
そのエンコーディングが「`UTF-8-MAC`」で表されるので、それを処理したいエンコーディング  
(例の場合「`UTF-8`」)に変換すればよいかと思います。
CC BY-SA 3.0
2017-06-03T01:37:23.003
35240
2017-06-03T01:37:23.003
20098
35232
answer