Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: import pliku txt z jednoczesnym jego przekodowaniem pod PHP
Forum PHP.pl > Forum > PHP
Czadus
Witam. Jest to mój pierwszy post na tym forum, więc z góry przepraszam za złamanie jakiegokolwiek punku regulaminu.

Mam mały problem, a może raczej wątpliwość. Mam stworzony system dla firmy zajmującej się doradztwem majątkowym. Na stronie zawarte są wszystkie dane odnośnie wpłat klientów, prowizji dla pracowników itp. Wpłatę dla danego klienta można dokonać indywidualnie poprzez formatki, i tutaj wszystko jest ok. Ale co, Jeżeli należy dokonać wpłat np. dla 300 osób?? Trochę to pracochłonne. Stąd też powstał oddzielny dział w tym systemie. Tam, importując plik z danymi, mamy możliwość w ciągu 1-2 minut dokonać wpłat dla sporej liczby klientów. I tutaj pojawia się dla mnie wątpliwość. Dokonuję poprawiania błędów strony, które to błędy spowodowane są przez tegoż programistę, który cały system pisał. Ja zmieniłem kodowanie strony na UTF-8..... Po czym powstaje problem. Pliki *.txt które firma otrzymuje mają inne kodowanie aniżeli strona, na którą te wpłaty importujemy. Tym samym powstaje problem z polskimi znakami, które w pliku *.txt są poprawnie widoczne, jednak po zaimportowaniu do strony, powstają jedynie krzaczki. I nie ma się co dziwić, kodowanie strony a tego pliku są zupełnie inne. Aby rozwiązać mój problem, skorzystałem z funkcji iconv(). Pierwszy parametr to kodowanie wejściowe, drugi parametr to wyjściowe, a trzeci to pewien string wejściowy. Gdybym miał pewność, że plik *.txt zawsze będzie miał to samo kodowanie, byłoby ok, no ale nigdy nie wiemy co będzie. Dlatego j a lekko zmodyfikowałem funkcję do poniższej postaci:

iconv("","UTF-8",$a);

Jak widać, nie podałem kodowania wejściowego sądząc, że PHP weźmie każde kodowanie i przekonwertuje je na UTF-8. Ale nie jest to określone w specyfikacji php. Moje pytanie zatem brzmi, czy mogę czućsię swobodnie tak korzystając z tej funkcji?? Czy mam powody obawiać się, że może zdarzyć się coś nieprzewidywalnego?? Albo, że jakiś plik zostanie niepoprawnie przekonwertowany?? No i czy jest to moduł, który jest czymś dodatkowym, czy każdy serwer go udostępnia?? Będę wdzięczny za każdą informację. Pozdrawiam
Fixus
a jak ten plik w ogóle jest pobierany? Wymuszasz ściąganie przez przeglądarkę czy zapisuje się on na serwerze?
Co do kodowania możesz zawsze wykorzystać naglowki do tego celu. Ja mialem ostatnio podobny problem, jednak u mnie to dotyczylo zarówno polskich ogonków, niemieckich kropeczek i bulgarskiej cyrylicy. W moim wypadku plik .txt (czasami .csv) jest ściągany przez przeglądarkę. Żeby naprawić problem kodowania podczas tworzenia plików wykorzystuje header() w którym to ustawiam kodowanie na utf8

co do twojego pytania konkretnie już. Zawsze możesz sprawdzić jakie kodowanie ma ten plik i ustawić je jako parametr
Czadus
Zasadniczo jest tak, że plik jest importowany na serwer poprzez przeglądarkę a potem z tego pliku wczytywane są wartości
nevt
Wg moich doświadczeń iconv( ... ) z pustym pierwszym parametrem świetnie się sprawdza, z jednym wyjątkiem: kiedy dane wejściowe już są w utf-8 to na wyjściu generuje krzaki (trochę to dziwne). Ale to łatwo sprawdzić funkcją mb_check_encoding( ... )
Czadus
Czyli rozumiem, że korzystając z funkcji mb_check_encoding() sprawdzam kodowanie pliku i jeżeli jest ono różne od UTF-8, to wówczas zastosować funkcję iconv() questionmark.gif

No a co z moim pytaniem odnoszącym się do tego, czy ten moduł odowiedzalny za przekodowywanie plików dostępny jest na każdym serwerze?? Tzn. czy przenosząc moją stronę może okazać się, że z powodu braku tego modułu wystąpi błąd w działaniu strony?

Czy taka forma tej funkcji będzie poprawna:
mb_check_encoding ($tekst, 'UTF-8') questionmark.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.