2016-09-03 3 views
0

Der folgende Code ist für die Auflistung aller Dateien und Ordner eines Verzeichnisses in alphabetischer Reihenfolge, und es funktioniert perfekt ... fast.Verzeichnisinhalt mit ungewöhnlichen Zeichen auflisten Dateinamen

<?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>"); 
} 
?> 

Die Situation ist, dass meine Dateien und Ordner in ihren Namen einige seltsame Zeichen haben, wie é, ï, être.htm, écouter.txt usw. Wenn ich auf den durch den Code über die Links führen die Zeichen enthalten, nicht Ascii aufgeführten Links klicken 404 Irrtum und Das Ziel wird nicht geöffnet, während die Verbindungen ohne merkwürdige Merkmale voll funktionsfähig sind.

Können Sie mir bitte sagen, wie Sie das lösen?

+0

try ~ url_encode ($ Datei) ~ und zitieren Sie es richtig aus. – Forbs

+0

Können Sie mir bitte erklären, wie das geht? Ich bin neu in PHP. –

+0

Ich habe es mit «urlencode ($ datei)» versucht und jetzt funktionieren die Links mit Sonderzeichen, aber nicht die mit Leerzeichen. –

Antwort

0

Versuchen Sie, diese

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

Sie sagten, dass Räume ein Problem waren aber url_encode würde 20 dem Raum eine% gemacht habe, so bin ich nicht sicher, warum Sie haben ein Problem

0

Lösung:

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

RFC 3986 - Raum mit %20 ersetzt

+0

DIE LÖSUNG MIT ** 'rawurlencode ($ file)' ** FUNKTIONIERT NOCH BESSER! DER VORTEIL IST, DASS ES EINE EINZIGE SCHRITT-FUNKTION IST. DANKE VIELMALS. –

0

die s gefunden Lösung selbst und dank «Forbs».

Beim Extrahieren oder ich den URL-Pfad einer Datei ($file im Code oben), gefolgt ich zwei Schritte: Der Einsatz von urlencode($file) und str_replace("+", "%20", $url). Der Grund dafür ist, dass urlencode perfekt für die Änderung ungewöhnlicher Zeichen für die richtige URL-Codierung ist, aber diese Funktion ersetzt auch die Leerzeichen im URL-Pfad für ein Pluszeichen (+). Daher müssen Sie str_replace("+", "%20", $url) verwenden, um jedes Pluszeichen für die richtige URL-Codierung zu ersetzen: .

Also, hier ist die endgültige PHP-Programmierung zum Auflisten des Inhalts eines Ordners mit ungewöhnlichen Zeichen in Dateinamen (z. B. être.txt, écouter.php, canción.mp3).

Verzeichnisliste

<?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>"; 
    } 
?> 

Das ist es. Ich hoffe, es ist von Nutzen.

Verwandte Themen