Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Lista katalogów a polskie znaki, polskie znaki jako link/nazwa
travi
post 23.02.2013, 15:13:38
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 23.02.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
daniel1302
post 23.02.2013, 20:06:49
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
com
post 24.02.2013, 01:13:46
Post #3





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


  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

Ten post edytował com 24.02.2013, 01:17:30
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:48