[PHP-users 11711] リンク先のフォルダ/ファイルに日本語が含まれている為にURLEncodeしURLを作成したのですが、能・構等アスキーの"\"記号含む文字の時にリンクしません

Mari Shiki php-users@php.gr.jp
Fri, 22 Nov 2002 16:01:15 +0900


志岐といいます。

PHPで、サーバのフォルダ内のフォルダ/ファイルをエクスプローラ的に表示し、
階層を掘り下げて最終的にファイルを表示できるようなプログラムを作りました。

ファイル名・フォルダ名を業務上日本語にし、使う人に
分かりやすくしようと思ったのですが、そのまま日本語名で
URL名を組むとIEではみれないので、日本語部分を全てEncodeして
URLを作るようにしました。

しかし、能・構・予・ソ等アスキー文字での"\"(code'%5c')を含むファイルでは
リンクできないというバグが出来ました。

サーバ側ではmagic_quotes_gpc=offの設定をしていることより
ファイルをAddslashes()してencodeすればいいのかなとも思ったのですが
それでもnot found としかでてきませんでした。

他の手として、他のFUNCTIONを作成し、codeをUrlencodeするのではなく
EUC-JP,ISO-2022-JP,等に変換してURLを作ったらどうかともしてみましたが
駄目でした。


PHP-users 8601をみてみると、不可能なのかとも思うようになってきました。

何か方法はないのでしょうか?
<HTML>
<HEAD>
</HEAD>
<SCRIPT LANGUAGE="PHP">
$Cdir=".".$SecCode.$Curdir;
chdir($Cdir);
$handle=opendir(".");//カレントディレクトリをオープンします。
//カレントディレクトリにあるファイルの名前を出力します
print "<IMG src=\"../../images/menu_root.gif\"><BR>\n";
While ($file=readdir($handle)){
     if(is_file($file)==true){           //つかんだファイルの属性がファイルだっ
た場合
          $expFld=explode("/",substr($Curdir,1));            //ディレクトリを"
/"で分割し、配列に格納します。
          if(count($expFld)==2){                                  //"/"で分割さ
れた配列要素の数が二つだった場合。

$inpFld="/".rawurlencode(addslashes($expFld[0]))."/".rawurlencode(addslashes($expFld[1]));

          }
          else{
               $inpFld="/".rawurlencode(addslashes($expFld[0]));
          }

     echo rawurlencode(addslashes($expFld[0])) ."<BR>\n";

          print "<IMG src=\"../../images/menu_Tee.gif\"><IMG
src=\"../../images/menu_barhlz.gif\"><IMG
src=\"../../images/menu_link_local.gif\"><A
href=\".".$SecCode.$inpFld."/".rawurlencode(addslashes($file)."\">$file</A><BR>\n";

     }
     else if($file=="." || $file==".."){

     }
     else{
          print "<IMG src=\"../../images/menu_Tee.gif\"><IMG
src=\"../../images/menu_folder_closed.gif\"><A
href=\"./OpenFdr.php4?SecCode=$SecCode&Curdir=$Curdir/$file\">$file</A><BR>\n";

     }
}

closedir($handle);

</SCRIPT>
</form>
</BODY>
</HTML>