Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Lista katalogów a polskie znaki
Forum PHP.pl > Forum > Gotowe rozwiązania
travi
Witam.

Mam nadzieję, że to dobry dział.

Szukałem po sieci skryptu, który wyświetlałby podkatalogi w danym katalogu i kierował do nich linkiem.
Znalazłem coś takiego:

  1. <?php
  2. /* User configuration */
  3. $showsize = 0; /* Show size of each file, 1 for yes, 0 for no. */
  4.  
  5. /* Array with file types to display and the pictures to use.
  6. Syntax: $display['filetype'] = "picture"; */
  7. $display['php'] = "php.gif";
  8. $display['html'] = "html.gif";
  9. $display['htm'] = "html.gif";
  10. $display['shtml'] = "html.gif";
  11.  
  12. /* Array with directories to exclude.
  13. Syntax: $excludedir[] = "directory"; */
  14. $excludedir[] = "temp";
  15. $excludedir[] = "tmp";
  16.  
  17. /* Array with files to exclude. */
  18. $excludefile[] = "index.php";
  19. $excludefile[] = "index2.php";
  20.  
  21. ?>
  22.  
  23. <?php
  24.  
  25. $stime = gettimeofday();
  26.  
  27. /* some preliminaries... */
  28. $root = getcwd();
  29.  
  30. $pre = explode("/", $_SERVER['REQUEST_URI']);
  31. array_pop($pre);
  32. $prefix = join("/", $pre);
  33.  
  34. /* Uncomment the 2 lines below to create a tree of all files and directories on your webserver if the script
  35.  * is in a subdirectory */
  36. //$root = str_replace($prefix, "", $root);
  37. //$prefix = "";
  38.  
  39. $root .= "/";
  40.  
  41. /* Display server name and directory */
  42. echo "<table cellspacing=0 cellpadding=0 border=0>\n";
  43. /*echo "<tr><td><img align=absmiddle src=server.gif> http://".$_SERVER['SERVER_NAME'];*/
  44. /*echo "$prefix/";*/
  45. /*echo "</td></tr><tr><td><img align=absmiddle src=vertical.gif></td></tr>\n";*/
  46.  
  47. function get_extension($name) {
  48. $array = explode(".", $name);
  49. $retval = strtolower(array_pop($array));
  50. return $retval;
  51. }
  52.  
  53. /* Recursion, here we go.. */
  54. function list_dir($chdir) {
  55. /* some globals, some cleaning */
  56. global $root, $prefix, $showsize, $display, $excludedir, $excludefile;
  57. unset($sdirs);
  58. unset($sfiles);
  59. chdir($chdir);
  60. $self = basename($_SERVER['PHP_SELF']);
  61.  
  62. /* open current directory */
  63. $handle = opendir('.');
  64. /* read directory. If the item is a directory, place it in $sdirs, if it's a filetype we want
  65. * and not this file, put it in $sfiles */
  66. while ($file = readdir($handle))
  67. {
  68. if(is_dir($file) && $file != "." && $file != ".." && !in_array($file, $excludedir))
  69. { $sdirs[] = $file; }
  70. elseif(is_file($file) && $file != "$self" && array_key_exists(get_extension($file), $display)
  71. && !in_array($file, $excludefile))
  72. { $sfiles[] = $file; }
  73. }
  74.  
  75. /* count the slashes to determine how deep we're in the directory tree and how many
  76. * nice bars we need to add */
  77. $dir = getcwd();
  78. $dir1 = str_replace($root, "", $dir."/");
  79. $count = substr_count($dir1, "/") + substr_count($dir1, "\\");
  80.  
  81. /* display directory names and recursively list all of them */
  82. if(is_array($sdirs)) {
  83. sort($sdirs);
  84. reset($sdirs);
  85.  
  86. for($y=0; $y<sizeof($sdirs); $y++) {
  87. echo "<tr><td>";
  88.  
  89. echo "<a style='color:#000; text-decoration:none;' href=\"http://".$_SERVER['SERVER_NAME']."$prefix/$dir1$sdirs[$y]\">$sdirs[$y]</a>";
  90. list_dir($dir."/".$sdirs[$y]);
  91. }
  92. }
  93.  
  94. chdir($chdir);
  95.  
  96. /* iterate through the array of files and display them */
  97. if(is_array($sfiles)) {
  98. sort($sfiles);
  99. reset($sfiles);
  100.  
  101. $sizeof = sizeof($sfiles);
  102.  
  103. /* what file types shall be displayed? */
  104. for($y=0; $y<$sizeof; $y++) {
  105. echo "<tr><td>";
  106.  
  107. echo "<a href=\"http://".$_SERVER['SERVER_NAME']."$prefix/$dir1$sfiles[$y]\">$sfiles[$y]</a>";
  108.  
  109. }
  110. echo "<tr><td>";
  111. for($z=1; $z<=$count; $z++)
  112. { echo "<img align=absmiddle src=vertical.gif>&nbsp;&nbsp;&nbsp;"; }
  113. echo "</td></tr>\n";
  114. }
  115. }
  116.  
  117. list_dir($root);
  118.  
  119. echo "</table>\n";
  120. ?>


W czym problem?
Skrypt wyświetla katalogi oraz działa w taki sposób jak chciałem czyli po wy-listowaniu nazw katalogów kieruje do nich linkiem (czyli nazwa = link).
Problem w tym, że mam w katalogu również foldery zawierające polskie znaki np. tak:

- Warszawa
- Bydgoszcz
- Zakopane
- Łódź (jednak tutaj wyświetla mi tylko Łód - brak "ź" przez co również link nie działa. Link wygląda tak: www.mojastrona/katalog/Łód <-na końcu spacja zamiast "ź"Ÿ)
- MPK Łódź (tutaj również brak "ź" - nie wiem co ze spacją w nazwie folderu, czy działa jakoś na poprawność działania linku)

Moje pytanie jest następujące:
Co zrobić aby skrypt wyświetlał polskie znaki oraz aby link kierował do folderu który posiada w nazwie właśnie polskie znaki?

Jeśli nie ma szans aby ten skrypt działał wedle moich oczekiwań to czy macie może jakieś inne pomysły jak uzyskać pożądany efekt?

Pozdrawiam wszystkich.
daniel1302
Jaki system operacyjny? Bo to zależy od systemu. Jeśli linux to musisz ustawić obsługę polskich znaków, ale nie zalecam ci tego.

Najprościej zrobić w bazie danych tabele linki:
ID|KATALOG|LINK

I teraz nie masz problemu, albo plik tekstowy, albo np w katalogu dodać plik link.txt i w nim trzymać nazwę. Na wiele sposobów da się to rozwiązac
com
  1. iconv("CP1250","UTF-8",$file);

lub
  1. function win2utf(){
  2.  
  3. $tabela = Array(
  4. "\xb9" => "\xc4\x85", "\xa5" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
  5. "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
  6. "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\x9c" => "\xc5\x9b", "\x8c" => "\xc5\x9a",
  7. "\x9f" => "\xc5\xba", "\xaf" => "\xc5\xbb", "\xbf" => "\xc5\xbc", "\xac" => "\xc5\xb9",
  8. "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83", "\x8f" => "\xc5\xb9");
  9. return $tabela;
  10. }
  11.  
  12. function WIN1250_2_UTF8($file){
  13. return strtr($file, win2utf());
  14. }
  15.  
  16.  
  17. echo WIN1250_2_UTF8($file);

wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.