人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です
coreserverです 以下の様なフォルダ構成になっています
======================
hoge.php
hoge
|_a.php
|_あ.php
======================

hoge.php
======================
<?php
foreach(glob('hoge/*.php') as $f) {
echo "<a href=\"http://hoge.jp/$f\">".basename($f,'.php')."</a>";
}
?>
======================

hoge.phpを実行しますと以下の様に英文字のファイルはきちんと表示されますが日本語ファイルはきちんと表示されません

<a href="hoge.jp/a.php">a</a>
<a href="hoge.jp/あ.php">.php</a>

どのようにすればいいでしょうか?


●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

今調べました所 頭文字に英文字が使われていると 例:aあ.php などは表示されます


1 ● ジント兄さん
●500ポイント ベストアンサー

basename() はマルチバイトが含まれていると失敗するそうです。
http://php.net/manual/ja/function.basename.php
setlocale() でロケールを設定する方法が紹介されていますが、
それもちょっと難があるような。

echo "<a href=\"http://hoge.jp/$f\">".mb_substr(mb_strrchr($f, "/"), 1)."</a>";
こういう感じでファイル名の切り出しを他の文字列操作関数でやってしまうのが
いいんじゃないでしょうか。


takaniiさんのコメント
さくらレンタルサーバーでは動いていました ありがとうございました 拡張子を表示したくないのですが どのように組めばいいでしょうか?

takaniiさんのコメント
>|php| echo "<a href=\"http://hoge.jp/$f\">".mb_substr(mb_strrchr($f, "/"), 1,-4)."</a>"; ||<

takaniiさんのコメント
でいけました ありがとうございました!

ジント兄さんさんのコメント
コメント書こうと思ったら、自己解決できたようですね。 拡張子が.phpじゃない時も対応したくなるとその方法では困るかもしれないので、 そういうときはexplode()で foreach(glob('hoge/*.php') as $f) { $filename = explode('.', mb_substr(mb_strrchr($f, "/"), 1)); echo "&lt;a href=\"http://hoge.jp/$f\"&gt;".$filename[0]."&lt;/a&gt;"; } とか。微妙なコードですね。 preg_replace()を使うのがいいかもしれないし、もっといい方法があるかもしれません。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ