Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]import pliku csv w innym kodowaniu. Czy to normalne?, Strona w UTF a plik zapisany jako ANSI - ISO
kukix
post 11.12.2008, 12:00:15
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Wtam.

Przygotowuje moduł importu danych z pliku csv.
Problem w tym, że strona jest w UTF-8, natomiast pliki csv są w formacie ISO (zapisane jako ANSI)..
Podczas wykonywania importu w miejscach gdzie są polskie litery urywa sie tekst..

Po zapisaniu pliku csv jako UTF-8, import przebiega pomyslnie.


W jaki sposób użyć funkcji iconv() w tym przypadku?

  1. <?php
  2. $uchwyt = fopen ($sciezka_do_pliku,"r");
  3.  
  4. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE)  {
  5.  
  6. $data[0]
  7. $data[1]
  8. $data[2]
  9.  
  10. }
  11. ?>


Będe bardzo wdzięczny za wszelkie wypowiedzi.

Ten post edytował kukix 11.12.2008, 12:03:51
Go to the top of the page
+Quote Post
wookieb
post 11.12.2008, 12:02:42
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Używa sie jej tak jak pisze w manualu
http://tinyurl.com/6cxnsa

Ten post edytował wookieb 11.12.2008, 12:04:11


--------------------
Go to the top of the page
+Quote Post
kukix
post 11.12.2008, 12:14:58
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Cytat(wookieb @ 11.12.2008, 14:02:42 ) *
Używa sie jej tak jak pisze w manualu
http://tinyurl.com/6cxnsa

czytałem manuala dokładnie...

nie wiem tylko na jakim etapie zrobic ta konwersje.. czy cały plik najpierw przekonwerterować, czy już w pętli każdą z danych..

próbowałem zrobic to tak:





  1. <?php
  2. $uchwyt = fopen ($sciezka_do_pliku,"r");
  3.  
  4. $uchwyt = iconv('ASCII//TRANSLIT', 'UTF-8', $uchwyt);
  5.  
  6. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE)  {
  7.  
  8.  //próbowałem tez tak
  9.  $data = iconv('ASCII//TRANSLIT', 'UTF-8', $data);
  10.  
  11.  $data[0]
  12.  $data[1]
  13.  $data[2]
  14.  
  15. }
  16. ?>

jednak coś takiego nie działa, jak sie domyślam, zmienna $uchwyt nie zawiera danych do przekonwerterowania.

natomiast funkcja iconv() użyta w pętli zwracała błąd.. w ten sposób tablic sie chyba nie konwertuje :/
Go to the top of the page
+Quote Post
wookieb
post 11.12.2008, 12:18:27
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To czytaj do skutku, aż będziesz wiedział JAKIEGO TYPU PARAMETRY przyjmuje funkcja.
Cytat
w ten sposób tablic sie chyba nie konwertuje :/

Chyba napewno.

Odpowiedz jest tak oczywista ze jezeli ci ja dam to sie niczego nie nauczysz.

EDIT// Masz jeszcze jedna podpowiedz http://php.net/implode

Ten post edytował wookieb 11.12.2008, 12:39:03


--------------------
Go to the top of the page
+Quote Post
erix
post 11.12.2008, 18:56:35
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
natomiast funkcja iconv() użyta w pętli zwracała błąd.. w ten sposób tablic sie chyba nie konwertuje :/

Oczywiście, że nie. Musisz przejść przez każdy jej element, choć tu proponowałbym użycie array_walk" title="Zobacz w manualu PHP" target="_manual. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kukix
post 13.12.2008, 13:57:49
Post #6





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Cytat(erix @ 11.12.2008, 20:56:35 ) *
Oczywiście, że nie. Musisz przejść przez każdy jej element, choć tu proponowałbym użycie array_walk" title="Zobacz w manualu PHP" target="_manual. winksmiley.jpg



dzieki wielkie.. to bedzie chyba najlepsze rozwiązanie.. array_walk ...

jeżeli chodzi o http://php.net/implode to z tego co widze, to rozpisuje elementy tablice do jednej zmiennej.. ale trzeba to później spowrotem złożyć w tablice i tak chyba tyroszke bna około by było..
Go to the top of the page
+Quote Post
erix
post 13.12.2008, 14:22:31
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ale po co implode" title="Zobacz w manualu PHP" target="_manual? tongue.gif

Przeciez dostajesz gotową tablicę, przez którą możesz przeiterować iconv" title="Zobacz w manualu PHP" target="_manual, to jaki problem?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kukix
post 15.12.2008, 12:54:58
Post #8





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Cytat(erix @ 13.12.2008, 16:22:31 ) *

Wspomniałem o implode, ponieważ wookieb podał mi link do tej funkcji..

Zrobiłem to tak:
  1. <?php
  2. $uchwyt = fopen ($sciezka_do_pliku,"r");
  3.  
  4. function zmiana_utf (&$element1, $klucz) {
  5.  $element1 =  iconv('ISO-8859-2', 'UTF-8', $element1);
  6. }
  7.  
  8. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE)  {
  9.  
  10.  array_walk ($data, 'zmiana_utf');
  11.  
  12.  $data[0]
  13.  $data[1]
  14.  $data[2]
  15.  
  16. }
  17. ?>


Jest już prawie ok, problem tylko w tym, że literka "Ś" po przekonwerterowaniu znika..
Wydaje mi sie, że źle użyta jest funkcja iconv()


może zamiast 'ISO-8859-2' powinno być coś innego?

plik CSV jest zapisany w Editplus z kodowaniem ANSI.

Ten post edytował kukix 15.12.2008, 12:55:35
Go to the top of the page
+Quote Post
erix
post 15.12.2008, 18:17:30
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A spróbuj otworzyć w Gżegżółce i sprawdzić, jakie jest kodowanie źródłowe? Nie jestem pewien, ale może masz w pliku CP1250?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kukix
post 16.12.2008, 17:53:09
Post #10





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Cytat(erix @ 15.12.2008, 20:17:30 ) *
A spróbuj otworzyć w Gżegżółce i sprawdzić, jakie jest kodowanie źródłowe? Nie jestem pewien, ale może masz w pliku CP1250?



Zainstalowałem gżegżółke i dodałem tam plik i kliknełem "ROZPOZNAJ" i wyskoczyło mi coś takiego:


Cytat
### wtorek, 16 grudnia 2008, godzina 17:51 ###
Tryb pracy: rozpoznanie
Na podstawie: heurystyka, znaczniki HTML/XML

E:2_strony\PlikCSV - ANSI.csv
Kodowanie: Windows 1250 (Europa Środkowa)
EOL: CRLF (Windows)




----------------- EDIT -----

Zamiast ISO dałem CP1250 i jest teraz ok.. dziekuje bardzo za pomoc!!

Ten post edytował kukix 16.12.2008, 17:57:52
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: 7.05.2025 - 05:28