ファイルパスから末尾のファイル名だけを取り出してくれる basename() は便利ですが、
ファイル名が日本語の場合などは、文字の一部が文字化けてしまったり、消えてしまったりすることがあります。
その際 setlocale() により適切なロケールを設定すれば正しく動作するようになります。
setlocale(LC_CTYPE, 'ja_JP.UTF-8'); $path = 'テスト.txt'; echo basename($path);
ただし PHP のバージョンによっては正常に動作しないケースも有るようなので、代替として次のような関数を作ってみました。
<?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 にも対応させてあります。
Similar Posts:
- [PHP]ひらがな・カタカナをローマ字に変換する
- [PHP]FTPでアップロードやダウンロード等のファイル操作を行う
- [PHP]マルチバイト文字列を比較して類似の度合いを計算する
- [PHP][JS, Ajax]郵便番号を住所に変換する
- [PHP]PHP7.0での変更点とアップグレード時の対応
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]料金表のようなものをテキストだけで表現する
- [PHP]ZipArchiveクラスを使ったファイルのZip圧縮と展開(解凍)