Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Lista plików - problem z polskimi znakami.
Forum PHP.pl > Forum > Przedszkole
gevaroght
Chciałem zmienić listę plików zwracaną przez serwer Apache na skonfigurowaną przeze mnie. A że nie znałem php była to nieco czasochłonne, ale jakoś się udało. Działało świetnie dopóki nie umieściłem w katalogu pliku z polskim znakiem "ł". Link naprawiłem używając funkcji urlencode() - zamienił "ł" na "%B3", ale nazwa wyświetlana na stronie zawiera nieznany znak. Po podaniu strony do W3C Validator otrzymałem błąd:

The error was: utf8 "\xB3" does not map to Unicode

Oto aktualny kod php:

  1. <?php
  2.  
  3. ini_set('display_errors','1');
  4.  
  5. $dirlist = NULL;
  6. $filelist = NULL;
  7.  
  8. $deep = substr_count($_SERVER['REQUEST_URI'], '/') - 1;
  9. for ($i = 0; $i < $deep; $i++)
  10. {
  11. $icon_dir .= '../';
  12. }
  13. $icon_dir .= 'img_filelist/';
  14.  
  15. if ($handle = opendir('.'))
  16. {
  17. while (false !== ($file = readdir($handle)))
  18. {
  19.  
  20. if ($file != "." && $file != ".." && $file != "index.php")
  21. {
  22. if (is_dir($file))
  23. {
  24. $dirlist[$file] = '<a href="' . $file . '/"><img src="' . $icon_dir . 'folder.png" >' . $file . '</a><br>';
  25. }
  26. else
  27. {
  28. $filelist[$file] = '<a href="' . urlencode($file) . '"><img src="' . $icon_dir;
  29. if (file_exists( $icon_dir . pathinfo($file, PATHINFO_EXTENSION) . ".png"))
  30. {
  31. $filelist[$file] .= pathinfo($file, PATHINFO_EXTENSION);
  32. }
  33. else
  34. {
  35. $filelist[$file] .= 'file';
  36. }
  37. $filelist[$file] .= '.png"> ' . $file . '</a><br>';
  38. }
  39. }
  40. }
  41.  
  42. @ksort($dirlist);
  43. @ksort($filelist);
  44.  
  45. closedir($handle);
  46. }
  47. ?>
  48.  
  49. <!DOCTYPE HTML>
  50. <html>
  51. <head>
  52. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  53. <title>Lista plików</title>
  54. </head>
  55. <body>
  56.  
  57. <p>List of files:</p>
  58. <p>
  59. <?php
  60. if ($deep == 1)
  61. {
  62. echo '<a href="../"><img src="' . $icon_dir . 'folder.png" >Wróć do example.com</a><br>';
  63. }
  64. elseif ($deep > 1)
  65. {
  66. echo '<a href="../"><img src="' . $icon_dir . 'folder.png" >W górę</a><br>';
  67. }
  68.  
  69. if ($dirlist !== NULL)
  70. {
  71. foreach ($dirlist as $key => $val)
  72. {
  73. echo $val;
  74. }
  75. }
  76.  
  77. if ($filelist !== NULL)
  78. {
  79. foreach ($filelist as $key => $val)
  80. {
  81. echo $val;
  82. }
  83. }
  84. ?>
  85. </p>
  86.  
  87. </body>
  88. </html>


Proszę o jakąś pomoc, albo chociaż naprowadzenie gdzie mogę szukać rozwiązania. Z góry dziękuję.
Mackos
Zainstaluj sobie notepad++ i daj na kodowanie pliku w UTF-b (bez BOM) zamień "%B3" na ł i zapisz.
Powinno działać.
gevaroght
Cytat(Mackos @ 23.11.2010, 02:44:47 ) *
Zainstaluj sobie notepad++ i daj na kodowanie pliku w UTF-b (bez BOM) zamień "%B3" na ł i zapisz.
Powinno działać.


Mam Notepad++ i od początku koduję w UTF-8 (bez BOM). Nie mam problemów z polskimi znakami bezpośrednio napisanymi w kodzie. Słowa "W górę" czy "Wróć" wyświetlają się jak najbardziej poprawnie. Problemem pojawia się jedynie gdy słowo z polskim znakiem przekazywane jest przez zmienną $file (każdą inną zresztą też).

Edit:
Jakoś sobie poradziłem, choć pewnie niejeden z was złapie się za głowę. Użyłem funkcji convert(mb_convert_encoding($file, "UTF-8")), gdzie convert to:

  1. function convert($text)
  2. {
  3. $znaki = array('ą','ę','ś','ć','ń','ł','ź','ż','ó','Ą','Ę','Ś','Ć','Ń','Ł','Ź','Ż','Ó');
  4. $krzaki = array('š','ę','œ','ć','ń','ł','Ÿ','ż','ó','Ľ','Ę','Œ','Ć','Ń','Ł','','Ż','Ó');
  5. $text = str_replace($krzaki,$znaki,$text);
  6. return $text;
  7. }


W $krzaki "" jest znakiem, ale się nie wyświetla.
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-2025 Invision Power Services, Inc.