ファイルパスから末尾のファイル名だけを取り出してくれる basename() は便利ですが、
ファイル名が日本語の場合などは、文字の一部が文字化けてしまったり、消えてしまったりすることがあります。
その際 setlocale() により適切なロケールを設定すれば正しく動作するようになります。
1 2 3 | setlocale(LC_CTYPE, 'ja_JP.UTF-8' ); $path = 'テスト.txt' ; echo basename ( $path ); |
ただし PHP のバージョンによっては正常に動作しないケースも有るようなので、代替として次のような関数を作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $path = 'http://localhost/test/日本語.txt' ; header( "Content-type: text/html; charset=UTF-8" ); echo mb_basename( $path , ".txt" ); function mb_basename( $str , $suffix =null){ $tmp = preg_split( '/[\/\\\\]/' , $str ); $res = end ( $tmp ); if ( strlen ( $suffix )){ $suffix = preg_quote( $suffix ); $res = preg_replace( "/({$suffix})$/u" , "" , $res ); } return $res ; } |
区切り文字にはスラッシュ・バックスラッシュ(円マーク)が混在して使えます。
suffix にも対応させてあります。