Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]upload plikow bez polskich znakow
Cr3dO
post 16.12.2009, 22:24:04
Post #1





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 13.07.2007
Skąd: łódź

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


hej mam metodke : move_uploaded_file($_FILES['Filedata']['tmp_name'], $_POST['path'].$_FILES['Filedata']['name']);

i teraz za jej pomocą uploaduje plik na serwer przy użyciu flesza/swf : http://flash-db.com/Tutorials/upload/upFiles.php?page=1

i mam problem z polskimi znakami, zamienia mi je na krzaczki

uploaduje plik : mój plik.jpg

i na serwerze zapisuje go : mĂłj plik.jpg

dlaczego?

Błąd mam po stornie flesza czy move_uploaded_file() nie daje rady?


--------------------
Pesymista widzi ciemny tunel. Optymista widzi światełko w tunelu. Realista widzi światło pociągu. Maszynista widzi trzech debili na torach.
Go to the top of the page
+Quote Post
piotrekkr
post 16.12.2009, 22:34:39
Post #2





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

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


hmm możliwe ze w nagłówkach flash wysyła nazwę pliku w jakimś dziwnym kodowaniu. Jakie kodowanie na serwerze masz ustawione? Serwer to windows? Jak sprawdziłeś z jaką nazwą zapisał się plik? Użyłeś total commandera czy konsoli?
Go to the top of the page
+Quote Post
thek
post 17.12.2009, 12:22:31
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Polskie znaki przy uploadzie konwertują się do takich i jedyną sensowną metodą jest konwersja nazwy pliku do pozbawionego ich, by nie wystąpiły problemy w przyszłości z brakiem możliwości skopiowania lub podejrzenia go.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
piotrekkr
post 17.12.2009, 16:28:11
Post #4





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

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


Zbadałem dokładniej sprawę i oto wnioski smile.gif. Znaki są konwertowane przed wysłaniem przez przeglądarkę na kodowanie zgodne z tym które jest na stronie www. Tzn. że jak na stronie mam utf-8 to wyśle mi nazwę w utf-8. Testowałem na FF 3.5 i na Operze 10.10. Na IE powinno być podobnie. Używam linuxa i mam ustawione kodowanie w systemie na utf-8. Dlatego gdy strona jest w kodowaniu utf to w $_FILES dostaje nazwę pliku w tymże kodowaniu i move_uploaded_file() zapisuje elegancko polskie znaki. Gdy zmienię kodowanie na powiedzmy iso-8859-2 i wyślę plik to funkcja move_uploaded_file() dostanie nazwę pliku z kodowaniem iso i w systemie pokaże mi krzaki zamiast polskich znaków. Dlatego jeśli masz kodowanie znaków w systemie inne niż na stronie z której idzie plik musisz konwertować kodowania. Możesz użyć iconv() albo mb_convert_encoding() (info w manualu). Tak mi się wydaje że flash skoro to wynalazek amerykansky smile.gif to pewnie wysyła wszystko w kodowaniu iso-8859-1. Możesz potestowac co dostajesz skryptem niżej i sprawdzać jakie kodowanie dostajesz od flasha zmieniając ręcznie kodowanie strony w przeglądarce już po wysłaniu pliku.

To kod którym testowałem:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Przykład</title>
  6. </head>
  7. <body>
  8. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" method="post">
  9. <input type="file" name="plik" /> <input type="submit" value="Wyślij" />
  10. </form>
  11. <pre>
  12. <?php
  13. var_dump($_FILES);
  14. if($_FILES['plik']['error'] == 0){
  15. $path = dirname(__FILE__).DIRECTORY_SEPARATOR.$_FILES['plik']['name'];
  16. var_dump($path);
  17. move_uploaded_file($_FILES['plik']['tmp_name'], $path);
  18. }
  19. ?>
  20. </pre>
  21. </body>
  22. </html>


Ten post edytował piotrekkr 17.12.2009, 16:43:36
Go to the top of the page
+Quote Post
Cr3dO
post 18.12.2009, 09:34:02
Post #5





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 13.07.2007
Skąd: łódź

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


Cytat(piotrekkr @ 17.12.2009, 16:28:11 ) *
Zbadałem dokładniej sprawę i oto wnioski smile.gif. Znaki są konwertowane przed wysłaniem przez przeglądarkę na kodowanie zgodne z tym które jest na stronie www. Tzn. że jak na stronie mam utf-8 to wyśle mi nazwę w utf-8. Testowałem na FF 3.5 i na Operze 10.10. Na IE powinno być podobnie. Używam linuxa i mam ustawione kodowanie w systemie na utf-8. Dlatego gdy strona jest w kodowaniu utf to w $_FILES dostaje nazwę pliku w tymże kodowaniu i move_uploaded_file() zapisuje elegancko polskie znaki. Gdy zmienię kodowanie na powiedzmy iso-8859-2 i wyślę plik to funkcja move_uploaded_file() dostanie nazwę pliku z kodowaniem iso i w systemie pokaże mi krzaki zamiast polskich znaków. Dlatego jeśli masz kodowanie znaków w systemie inne niż na stronie z której idzie plik musisz konwertować kodowania. Możesz użyć iconv() albo mb_convert_encoding() (info w manualu). Tak mi się wydaje że flash skoro to wynalazek amerykansky smile.gif to pewnie wysyła wszystko w kodowaniu iso-8859-1. Możesz potestowac co dostajesz skryptem niżej i sprawdzać jakie kodowanie dostajesz od flasha zmieniając ręcznie kodowanie strony w przeglądarce już po wysłaniu pliku.


Chyba jednak to nie to, w ustawieniach publikacji aplikacji mam UTF-8 ( 1.jpg ) i na stronie na ktorej dziala app tyez ma UTF-8 ( 2.jpg )







--------------------
Pesymista widzi ciemny tunel. Optymista widzi światełko w tunelu. Realista widzi światło pociągu. Maszynista widzi trzech debili na torach.
Go to the top of the page
+Quote Post
piotrekkr
post 18.12.2009, 11:34:15
Post #6





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

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


Chyba się trochę nie zrozumieliśmy smile.gif Ja pisałem o tym jak robi wysyłanie plików przeglądarka. Nie wiem jak robi to flash. Bo przez flasha wysyłane są pliki w twoim przypadku. Dlatego musisz przetestować w skrypcie który odbiera pliki z flasha, w jakim kodowaniu otrzymujesz nazwę pliku. Jak już to będziesz to wiedział to już najtrudniejsze za tobą smile.gif Zapisuj nazwę otrzymaną z flasha w jakimś pliku tekstowym i odpal go zmieniaj kodowania aż trafisz na właściwe i wtedy się dowiesz winksmiley.jpg
Go to the top of the page
+Quote Post
Cr3dO
post 18.12.2009, 16:02:01
Post #7





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 13.07.2007
Skąd: łódź

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


Cytat(piotrekkr @ 18.12.2009, 11:34:15 ) *
Chyba się trochę nie zrozumieliśmy smile.gif Ja pisałem o tym jak robi wysyłanie plików przeglądarka. Nie wiem jak robi to flash. Bo przez flasha wysyłane są pliki w twoim przypadku. Dlatego musisz przetestować w skrypcie który odbiera pliki z flasha, w jakim kodowaniu otrzymujesz nazwę pliku. Jak już to będziesz to wiedział to już najtrudniejsze za tobą smile.gif Zapisuj nazwę otrzymaną z flasha w jakimś pliku tekstowym i odpal go zmieniaj kodowania aż trafisz na właściwe i wtedy się dowiesz winksmiley.jpg


Pokombinuje, dzięki za pomoc, EOT smile.gif


--------------------
Pesymista widzi ciemny tunel. Optymista widzi światełko w tunelu. Realista widzi światło pociągu. Maszynista widzi trzech debili na torach.
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: 1.05.2025 - 05:20