2016-09-03 3 views
0

次のコードは、ディレクトリのすべてのファイルとフォルダをアルファベット順にリストするためのものです。珍しい文字のファイル名を含むディレクトリの内容を表示

<?php 
$files = array(); 
$dir = opendir('.'); 
while(false != ($file = readdir($dir))) { 
    if(($file != ".")and ($file != "..") and ($file != "index.php")) { 
    $files[] = $file; 
    } 
} 
natsort($files); 
foreach($files as $file) { 
    echo("<li><a href='$file'>$file</a>"); 
} 
?> 

状況は、私のファイルとフォルダは、自分の名前でいくつかの奇妙な文字を持っている私は、非ASCII文字を含むリンク上記のコードで記載されたリンクをクリックするとなどé, ï, être.htm, écouter.txt、同様に404エラーにつながるとということですターゲットは開かれないが、奇妙なキャラクタがないリンクは完全に動作する。

これを解決する方法を教えてください。

+0

try〜url_encode($ file)〜とそれを正しく引用してください。 – Forbs

+0

どうすればいいですか教えてください。私はPHPが初めてです。 –

+0

私は«urlencode($ file)»で試しましたが、特殊文字とのリンクは動作しますが、スペースを含むリンクは動作しません。 –

答えて

0

あなたは問題

0

ソリューション持っている理由私はよく分からないし20%のスペースが問題であったが、URL_ENCODEは、スペースを作ったと述べ、この

echo("<li><a href='".url_encode($file)."'>$file</a>"); 

試してみてください。

`echo("<li><a href='".rawurlencode($file)."'>$file</a>");` 

RFC 3986から%20

+0

** 'rawurlencode($ file)'を用いた解決策**より良い結果が得られます!利点は、1段階の機能だということです。どうもありがとう。 –

0

に置き換えスペースがsを発見しましたolutions自分自身と«Forbs»に感謝します。 urlencode($file)str_replace("+", "%20", $url)の使用:

抽出またはファイルのURLパス取得(コードで$fileは、上記)Iは、2つのステップが続きます。その理由は、適切なURLエンコーディングのために異常な文字を変更する場合にはurlencodeが最適ですが、この機能ではURLパスのスペースもプラス記号(+)に置き換えられます。したがって、str_replace("+", "%20", $url)を使用して、正しいURLエンコーディングのすべてのプラス記号(%20)を置き換える必要があります。

ここでは、ファイル名に珍しい文字を含むフォルダの内容をリストするための最終的なPHPプログラミングを示します(例:être.txt, écouter.php, canción.mp3)。

ディレクトリリストこれだけです

<?php 
$files = array(); 
$dir = opendir('.'); 
while(false != ($file = readdir($dir))) { 
    if(($file != ".") and ($file != "..") and ($file != "index.php")) 
    { 
     $files[] = $file; 
    } 
} 
    natsort($files); 
    foreach($files as $file) 
    { 
     $url_1 = urlencode($file); 
     $url_2 = str_replace("+", "%20", $url_1); 
     echo "<li><a href='".$url_2."'>".$file."</a></li>"; 
    } 
?> 

。私はそれがいくつかの使用の願っています。

関連する問題