Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]blokada pliku który zawiera w nazwie polskie znaki w uploadzie plików
Forum PHP.pl > Forum > Przedszkole
Kalysto
Witam otóż mam taki problem. Mam taki swój kod, dla niektórych może być ¶mieszny:
  1. $uploaddir = "upload/";
  2. $plik = $_FILES["file"]["tmp_name"];
  3. $file = $_FILES["file"]["name"];
  4.  
  5. if(isset($_POST['upload'])) {
  6. if (!($file)) {
  7. echo "Bł±d: " . $_FILES["file"]["error"];
  8. } else {
  9. echo "Wysłano: " . $_FILES["file"]["name"] . "<br />";
  10. echo "Typ pliku: " . $_FILES["file"]["type"] . "<br />";
  11. echo "Rozmiar: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  12. echo "Tymczasowo umieszczony w: " . $_FILES["file"]["tmp_name"];
  13. echo "<br>";
  14.  
  15. if (file_exists($uploaddir.$file)){
  16. echo '<font color="red">Plik istnieje</font>';
  17. } else {
  18.  
  19. move_uploaded_file($plik, $uploaddir.$file);
  20. echo '<font color="green">Plik zostal przeniesiony</font>';
  21. }
  22. }
  23. }

Służy on do wy¶wietlenia informacji o pliku i przeniesieniu go z tymczasowego katalogu do wybranego przeze mnie.
Zrobiłem także kod do wy¶wietlania tych wysłanych plików z katalogu (też może być ¶mieszny):

  1. $dir = "upload/";
  2. $d = opendir($dir);
  3. while($file = readdir($d)) {
  4. if ($file!="." && $file!=".." && $file!="...") {
  5. print "<LI>";
  6.  
  7. $sp = explode(".", $file);
  8.  
  9. if ($sp[1] == "c") {
  10. echo " <img src='.img/file.jpg' width='20px' height='20px'>";
  11. } else if ($sp[1] == "cpp") {
  12. print "<img src='.img/file.jpg' width='20px' height='20px'>";
  13. } else {
  14. print "<img src='.img/folder.png' width='20px' height='20px'>";
  15. }
  16. echo "<a href='$dir/$file'>$file</a><br></LI>";
  17. }
  18. }

I teraz mój problem polega na tym iż jeżeli plik zawiera polskie znaki w nazwie, tego pliku nie da się niestety pobrać. Czy jest możliwo¶ć zablokowania w jaki¶ sposób żeby wy¶wietlało bł±d gdy plik zawiera polskie znaki i zablokować wysyłanie takiego pliku? Lub czy też jest sposób by można było pobierać pliki z polskimi znakami z katalogu serwera? B±dĽ czy jest kod na zamianę polskich znaków na zwykłe (chodzi mi np o zamianę ± na a w nazwie pliku) ?
Korzystam z hostingu cba, iż nie stać mnie na płatny. Proszę o pomoc.
Damonsson
Zdecydowanie wybierz opcję z zamian± znaków ± -> a itd.

Jak to zrobić? My¶lę, że google sypnie tysi±cami przykładów.
Kalysto
Szukałem w googlach, być może użyłem złego hasła. Prosiłbym o jakie¶ hasło co w te google wpisać to poszukam. smile.gif
untorched
Proszę.. Tak po to by¶ się nie męczył wink.gif
  1. $tekst = strtr($tekst, 'ĘÓˇ¦ŁŻ¬ĆŃęó±¶łżĽćń', 'EOASLZZCNeoaslzzcn')
Kalysto
Dziękuję, no dobrze ale jak zrobić sprawdzenie czy nazwa pliku zawiera polskie znaki?
untorched
Ehh.. Po co sprawdzać? Zamień.
  1. $plik = strtr($_FILES['file']['tmp_name'], 'ĘÓˇ¦ŁŻ¬ĆŃęó±¶łżĽćń', 'EOASLZZCNeoaslzzcn');
Kalysto
Dziękuję ¶licznie smile.gif Gdy człowiek się dopiero uczy nie zauważa tak prostych rozwi±zań smile.gif
untorched
No to jeszcze można tak
  1. function znaki( $string )
  2. {
  3. $a = array( 'Ę', 'Ó', 'ˇ', '¦', 'Ł', 'Ż', '¬', 'Ć', 'Ń', 'ę', 'ó', '±', '¶', 'ł', 'ż', 'Ľ', 'ć', 'ń' );
  4. $b = array( 'E', 'O', 'A', 'S', 'L', 'Z', 'Z', 'C', 'N', 'e', 'o', 'a', 's', 'l', 'z', 'z', 'c', 'n' );
  5. $string = str_replace( $a, $b, $string );
  6. $string = preg_replace( '#[^a-z0-9]#is', ' ', $string );
  7. $string = trim( $string );
  8. $string = preg_replace( '#\s{2,}#', ' ', $string );
  9. $string = str_replace( ' ', '-', $string );
  10. return $string;
  11. }
  12.  
  13. $plik = znaki($_FILES['file']['tmp_name']);
potreb
Wywal wszystkie funkcje powyżej! Poniższe jest o wiele lepsza, ale chińskie znaczki maj± się gorzej smile.gif

  1. function friendly($str)
  2. {
  3. $str = iconv('UTF-8', 'ASCII//IGNORE', $str);
  4. $charsArr = array( '^', '\'', '"', '`', '~');
  5. $str = str_replace( $charsArr, '', $str );
  6. $str = preg_replace( "/[^a-z0-9-_.,]{1}/i", '-', $str );
  7. while(strcmp($str, $str = str_replace( array('__', '--'), array('_', '-'), $str)) != 0 );
  8. return strtolower($str);
  9. }
Kalysto
Sorki ja z edytowałem z powrotem post, bo problem rozwi±załem i nie był to zły skrypt. Php wykrył że litera ± nie była jako ± tylko jako znaczek html ±, i trzeba było tylko to dodać do skryptu żeby zamieniało na a, dlatego nie działało. Mimo to dziękuję za pomoc smile.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-2025 Invision Power Services, Inc.