Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> import pliku txt z jednoczesnym jego przekodowaniem pod PHP, na temat iconv()
Czadus
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Fixus
post
Post #2





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


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
Go to the top of the page
+Quote Post
Czadus
post
Post #3





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


Zasadniczo jest tak, że plik jest importowany na serwer poprzez przeglądarkę a potem z tego pliku wczytywane są wartości
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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( ... )
Go to the top of the page
+Quote Post
Czadus
post
Post #5





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


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() (IMG:http://forum.php.pl/style_emoticons/default/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') (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował Czadus 29.08.2008, 23:21:10
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 16:10