2008/1/4 金曜日

PHPのpathinfo、basename関数で日本語ファイル名がうまく取得できない。

Filed under: php — admin @ 0:32:16

まさかbasename関数の方にバグがあったとは思わなかった。
というのは嘘だけど。
phpはその系のバグが結構あるので、バグを疑ってぐぐる日常。

そしてあった。
作業日報 | 【PHP】pathinfo、basename関数の日本語ファイル名取得問題
どうやら、ファイル名の最初がマルチバイト文字だといかんようだ。

このページには、PHPをバージョンアップする以外に解決方法が書いてなかったので、

  $img_name = basename($uri,".".$ext); //PHP 5.2.2以前はPHPのバグで動かない

  $img_name = current(mb_split(".",end(mb_split("/",$uri))));

こんな感じに解決してみました。

簡単に解説すると、マルチバイト対応のsplit mb_splitを使って/で配列に分解し、その配列の最後の値(ファイル名)を取ってきて、
さらにこれを.で分割して、拡張子を分離、currentでファイル名だけ取って来るって寸法。

ちなみにmb系は、文字列が長くなるとapacheが落ちるという別のバグがあるので、代替には注意されたし。

No Tags

コメント (0) »

この記事にはまだコメントがついていません。

コメント RSS トラックバック URL

コメントをどうぞ

You must be logged in to post a comment.