Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]import pliku csv w innym kodowaniu. Czy to normalne?
Forum PHP.pl > Forum > PHP
kukix
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.
wookieb
Używa sie jej tak jak pisze w manualu
http://tinyurl.com/6cxnsa
kukix
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 :/
wookieb
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
erix
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
kukix
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..
erix
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?
kukix
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.
erix
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?
kukix
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!!
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.