ingobar: Automatisch Index erzeugen: Umlaute passen nicht

Hallo zusammen,

bei mir haben sich eine Menge Dateien angesammelt, die ich mal irgendwie halbwegs sortiert ablegen muss. Dazu wollte ich mir in den großen Ordnern eine index.html erzeugen lassen mit der ich einen Überblick über die Inhalte bekomme. Ich benutze folgendes Skript:

  
function read_dir($dir) {  
   $path = opendir($dir);  
   while (false !== ($file = readdir($path))) {  
       if($file!="." && $file!="..") {  
           if(is_file($dir."/".$file))  
               $files[]=$file;  
           else  
               $dirs[]=$dir."/".$file;  
       }  
   }  
   if($dirs) {  
       natcasesort($dirs);  
       foreach($dirs as $dir) {  
           	foreach (explode("/",$dir) as $tmpDir) {  
           		echo "  ";  
           	}  
           	echo '<a href="'.$dir.'">';  
           	echo end(explode("/",$dir));  
           	echo '</a><br>'."\n";  
           	read_dir($dir);  
       }  
   }  
  
   if($files) {  
       natcasesort($files);  
       foreach ($files as $file) {  
           	foreach (explode("/",$dir) as $tmpDir) {  
           		echo "&nbsp;&nbsp;&nbsp;";  
           	}  
           	foreach (explode("/",$file) as $curFile) {  
           		echo "&nbsp;&nbsp;&nbsp;";  
           	}  
           	echo '<a href="'.$dir."/".$file.'">';  
           	echo end(explode("/",$file));  
           	echo '</a><br>'."\n";  
       }  
   }  
  
   closedir($path);  
}  
?>  
  
<?php  
//Aufruf  
$path=".";  
read_dir($path);  
?>  

Das Ergebnis speichere ich einfach als index.html. Fertig.

Allerdings machen die Umlaute Probleme. Manche Dateien und Ordner haben Umlaute drin, so dass der Code dann so aussieht:

Höhen.doc

Jemand ne Idee, was ich machen kann? Das Problem wäre weniger das sichtbare, aber ich kann halt auch nicht auf die Links klicken.

  1. Hi,

    Jemand ne Idee, was ich machen kann? Das Problem wäre weniger das sichtbare, aber ich kann halt auch nicht auf die Links klicken.

    naja, Du weisst doch wie mühsam es ist, über die shell auf sowas zuzugreifen. Aus "testüber test.rtf" wird dann "testu\314\210ber\ test.rtf".
    Also Gegenfrage: was hältst Du von einem kleinen Script zum Ersetzen von Leer- und Sonderzeichen im Dateibaum?

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Also Gegenfrage: was hältst Du von einem kleinen Script zum Ersetzen von Leer- und Sonderzeichen im Dateibaum?

      Das hatte ich mir auch überlegt. Das ginge dann aber wohl nur Perl, oder? Habe ich aber noch nie gemacht. Hättest du ein Skript, so als Ansatz? Dann könnte ich vielleicht das Ganze erweitern.

      1. Hi,

        Hättest du ein Skript, so als Ansatz?

        Meine Perlkenntnisse sind auch rudimentär, reicht grade, um meine Logfiles zu parsen ;-)
        Nachdem hierbei aber vor allem der passende reguläre Ausdruck entscheidend ist denke ich, dass Du mit ein wenig Recherche schnell fündig wirst...

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
  2. echo $begrüßung;

    Allerdings machen die Umlaute Probleme. Manche Dateien und Ordner haben Umlaute drin, so dass der Code dann so aussieht:
    Höhen.doc
    Jemand ne Idee, was ich machen kann?

    Finde zunächst heraus, welche Kodierung dein Dateisystem verwendet, kodiere dann in die von dir verwendete Kodierung um oder passe dich an die des Dateisystems an.

    Wenn du nicht weißt, welche Kodierung dein Dateisystem verwendet, frage den, der dein System eingerichtet hat. Ist das nicht möglich oder seine Antwort unbefriedigend, lass dir die Bytes des Dateinamens ausgeben (bin2hex() oder urlencode()) und vergleiche diese mit der des Sonderzeichens in diversen gängigen Kodierungen.

    echo "$verabschiedung $name";

    1. Hi,

      lass dir die Bytes des Dateinamens ausgeben (bin2hex() oder urlencode()) und vergleiche diese mit der des Sonderzeichens in diversen gängigen Kodierungen.

      Das würde beim Auslesen helfen. Aber denkst Du, dass man zuverlässig auf Verzeichnisse/Dateinamen verlinken kann, wenn sie Umlaute/Sonderzeichen enthalten?

      Gruesse, Joachim

      --
      Am Ende wird alles gut.
      1. echo $begrüßung;

        Aber denkst Du, dass man zuverlässig auf Verzeichnisse/Dateinamen verlinken kann, wenn sie Umlaute/Sonderzeichen enthalten?

        Warum nicht? Alles eine Frage der passenden Kodierung. In der Hinsicht nehmen sich Sonderzeichen nichts von "normalen" Zeichen. Bei letzteren ist es nur immer der selbe Wert in den gängigen Kodierungen.

        echo "$verabschiedung $name";