[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 メーリングリストの案内