[PHP-users 33477] basename()の日本語対応について

Makoto Kuwata kwa @ kuwata-lab.com
2008年 4月 22日 (火) 19:02:10 JST


桑田といいます。
質問ですが、PHPのbasename()関数を日本語対応にできますか。

現状のPHPのbasename()では日本語がうまく扱えないようです。
http://bugs.php.net/bug.php?id=37738
具体的には、日本語を含むパス名を与えると、空文字が返ってきます。
例:
$s = basename("日本語/にほんご");
var_dump;   #=> string(0) ""

回避策としては、mb_split() で分割して最後の要素を取り出すなどが
ありますが、自分が書いたのではないソースの修正が必要なため、
できれば basename() のバグを修正することを考えています。

いろいろ試したところ、Apache 経由で実行するとbasename()は
バグってますが、CLIで試すとうまく動作してくれます。

テストスクリプト (test.php):
  <?php $s1 = '日本語/にほんご'; ?>
  <?php #$s1 = '日本語'; ?>
  <?php $s2 = basename($s1); ?>
  <?php $s3 = dirname($s1); ?>
  <ul>
    <li><?php var_dump($s1); ?>
    <li><?php var_dump($s2); ?>
    <li><?php var_dump($s3); ?>
  </ul>

ブラウザで表示した場合 (http://localhost/test.php):
  <ul>
    <li>string(22) "日本語/にほんご"
    <li>string(0) ""
    <li>string(9) "日本語"
  </ul>

CLIで実行した結果 (/usr/local/bin/php test.php):
  <ul>
    <li>string(22) "日本語/にほんご"
    <li>string(12) "にほんご"
    <li>string(9) "日本語"
  </ul>

ここまでは自力で調べられたのですが、では具体的にどうすれば
basename() で日本語が使えるようになるかまでは分かりませんでした。
環境は Linux 2.6.18, Apache 2.2.3, PHP 5.2.5 です。
実は MacOS X 10.5 (Leopard) だと問題なく動くそうで、そのせいも
あって「なんとかしてくれ」といわれて困っています。
どなたかアドバイスいただけたらと思います。

以上です。よろしくお願いします。

--
makoto kuwata


PHP-users メーリングリストの案内