Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z fgetcsv() i literą "Ł"
Forum PHP.pl > Forum > Przedszkole
kombo
Witam,

mam np. taki plik CSV:

imie;nazwisko;adres
Łukasz;Nowak;Podlaska 1/1
Jan;Łysy;Krakowska 2
Łukasz;Łysy;Łeba 1

i kod php do jego odczytu oraz wyświetlenia odczytanych danych:

Kod


<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</HEAD>
<BODY>
<?php
$row=0;
$fp = fopen ("ludzie.csv", "r");
while ($data = fgetcsv ($fp, 2048, ";")) {
if ($row>0) {
$imie = $data[0];  
$nazwisko = $data[1];
$adres = $data[2];

echo $row. '. ' . $imie . ' ' . $nazwisko . ' ' . $adres . '<BR>';
}
$row=$row+1;
}
fclose($fp);
?>
</BODY>
</HTML>


po jego wykonaniu wyświetla się:

1. ukasz Nowak Podlaska 1/1
2. Jan ysy Krakowska 2
3. ukasz ysy eba 1

Skrypt jest tu: http://www.kombo.krakow.pl/testy/ludzie.php

Domyślam się że ma to związek z tym że litera "Ł" jest rozpoznawana jako znak funta brytyjskiego.

Pytanie brzmi: co zrobić żeby "Ł" było wyświetlane jeśli występuje jako 1 litera?
tsharek
Masz błędnie zbudowny plik CSV. Zgodnie ze specyfikacją stringi umieszczasz w cudzysłowiach (o odzielaniu przecinkami nie wspomnę, bo to sama nazwa wskazuje: Comma-Separated Values (CSV)).
kombo
Cytat(tsharek @ 28.09.2007, 15:17:25 ) *
Masz błędnie zbudowny plik CSV. Zgodnie ze specyfikacją stringi umieszczasz w cudzysłowiach (o odzielaniu przecinkami nie wspomnę, bo to sama nazwa wskazuje: Comma-Separated Values (CSV)).

No cóż, zasugerowałem się Excelem który wyeksportował do CSV bez cudzysłowów a także zastosował średnik jako separator (sądze że akurat kwestia separatora jest tu najmniej ważna).

Czyli co, poza zmianą zawartości CSV (czyli wzięcie w cudzysłowy każdego stringa) nic się nie da zrobić?

Pomijam taką opcję że przy zapisie pliku csv np. sprawdzam czy 1 znak w stringu to "Ł" i jesli tak - zapisuję go jako np. "!#*Ł" a przy odczycie usuwam "!#*"
tsharek
oczywiście można, ale nie używając fgetcsv. Możesz pobrać csvke funkcją file" title="Zobacz w manualu PHP" target="_manual która zwruci Ci tablicę z wierszy pliku. Później foreach" title="Zobacz w manualu PHP" target="_manual i explode" title="Zobacz w manualu PHP" target="_manual i masz już wszystkie dane.
cicik
Cytat(tsharek @ 28.09.2007, 15:17:25 ) *
Masz błędnie zbudowny plik CSV. Zgodnie ze specyfikacją stringi umieszczasz w cudzysłowiach (o odzielaniu przecinkami nie wspomnę, bo to sama nazwa wskazuje: Comma-Separated Values (CSV)).


O tym oddzielaniu przecinkami to nie do końca tak... sam się kiedyś na tym przejechałem.
Excel 2003 nie odczyta csvki z przecinkami - muszą być średniki. Za to Excel 2007 nie łyknie średników, tylko przecinki. Nie wiem jak z Excelem 2007 - wtedy jeszcze nie było ale generalnie są z tym jaja.
kombo
Pobawiłem się Excelem i okazało się że eksportuje do pliku CSV stringi ograniczone cudzysłowami jesli w danym stringu znajdzie się przynajmniej jeden znak średnika.

To raczej neguje mozliwość używania metody file->explode - bo jesli znajdzie się jakiś string ograniczony cudzysłowami w którym będzie średnik - wyjdzie kupa, funckja explode jednego stringa podzieli na dwa (niech mnie ktoś poprawi jeśli się mylę).
Zakładam że może się kiedyś być taka sytuacja i wtedy dopiero byłby klops winksmiley.jpg

Postanowiłem jednak przerobić skrypt tak aby ograniczał stringi cudzysłowami, to chyba będzie najprostsza/najszybsza/najbezpieczniejsza metoda.

Dziekuję wszystkim za wypowiedzi.
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.