2013年7月21日日曜日

MacOSXで作成したフォルダ名「ダ」(0xe382bf + 0xe38299) の PHP での回避策

OSXからWebdav経由で作成した「フォルダ」というフォルダの「ダ」が
UTF-8の文字コードだと「0xe38380」(ダ)ではなく、
「0xe382bf」(タ)+「0xe38299」(゛)で作成されているらしく、PHPでうまく参照できない。
※「フォルダ」の「ダ」の問題については ここら辺の検索結果 を参照

下記でとりあえず解決したのでメモしておく

<?php
$fullpath = "/path/to/target/フォルダ";
print "[" . $fullpath . "]"
    . " - " . (file_exists($fullpath) ? "exist" : "not exist"). "<br/>";  // NG
// OSX バグ対策
$fullpath = str_replace(
               pack("H*", "e38380")                  // 「ダ」
               , pack("H*H*", "e382bf", "e38299")    // 「タ」+「゛」
               , $fullpath);
print "[" . $fullpath . "]"
    . " - " . (file_exists($fullpath) ? "exist" : "not exist"). "<br/>";  // OK
?>

とりあえず良さそうです。