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>
どのようにすればいいでしょうか?
basename() はマルチバイトが含まれていると失敗するそうです。
http://php.net/manual/ja/function.basename.php
setlocale() でロケールを設定する方法が紹介されていますが、
それもちょっと難があるような。
echo "<a href=\"http://hoge.jp/$f\">".mb_substr(mb_strrchr($f, "/"), 1)."</a>";
こういう感じでファイル名の切り出しを他の文字列操作関数でやってしまうのが
いいんじゃないでしょうか。
basename() はマルチバイトが含まれていると失敗するそうです。
http://php.net/manual/ja/function.basename.php
setlocale() でロケールを設定する方法が紹介されていますが、
それもちょっと難があるような。
echo "<a href=\"http://hoge.jp/$f\">".mb_substr(mb_strrchr($f, "/"), 1)."</a>";
こういう感じでファイル名の切り出しを他の文字列操作関数でやってしまうのが
いいんじゃないでしょうか。
でいけました
ありがとうございました!
コメント書こうと思ったら、自己解決できたようですね。
拡張子が.phpじゃない時も対応したくなるとその方法では困るかもしれないので、
そういうときはexplode()で
foreach(glob('hoge/*.php') as $f) {
$filename = explode('.', mb_substr(mb_strrchr($f, "/"), 1));
echo "<a href=\"http://hoge.jp/$f\">".$filename[0]."</a>";
}
とか。微妙なコードですね。
preg_replace()を使うのがいいかもしれないし、もっといい方法があるかもしれません。
でいけました
2014/09/06 04:20:50ありがとうございました!
コメント書こうと思ったら、自己解決できたようですね。
2014/09/06 04:42:33拡張子が.phpじゃない時も対応したくなるとその方法では困るかもしれないので、
そういうときはexplode()で
foreach(glob('hoge/*.php') as $f) {
$filename = explode('.', mb_substr(mb_strrchr($f, "/"), 1));
echo "<a href=\"http://hoge.jp/$f\">".$filename[0]."</a>";
}
とか。微妙なコードですね。
preg_replace()を使うのがいいかもしれないし、もっといい方法があるかもしれません。