2008年4月22日

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

桑田といいます。
質問ですが、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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

投稿者 xml-rpc : 2008年4月22日 19:02
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/72399
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。