ファイル名などに日本語が含まれるパスでbasename関数が失敗するバグ

スポンサーリンク

basename関数はパスからディレクトリ情報を削除してベース名(「test.txt」など)を取得するための関数ですが、PHP5(使用バージョン:PHP 5.3.1)ではパスに日本語が含まれていると失敗します。

<?php
$a = "/dir/テスト.txt";
echo basename($a);
?>
日本語を含むパスでbasename関数が失敗する

日本語を含むパスでbasename関数が失敗する

この現象はPHP6では修正されているようですが、今すぐ対処する場合は、次のようなユーザー定義関数を作る方法があります。

<?php
$a = "/dir/テスト.txt";
echo my_basename($a);

function my_basename($a) {
    $temp = mb_substr(mb_strrchr($a, "/"), 1);
    return $temp;
}
?>
日本語を考慮したベース名の取得

日本語を考慮したベース名の取得

mb_strrchr関数は、パスに含まれる最後の「/」以降の文字列を取得し、mb_substr関数では先頭の1文字(/)を削除しています。

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル
スポンサーリンク