Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Problem z fgetcsv() i literą "Ł"
kombo
post 28.09.2007, 13:21:58
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.09.2007

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


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?

Ten post edytował kombo 28.09.2007, 20:05:08
Go to the top of the page
+Quote Post
tsharek
post 28.09.2007, 14:17:25
Post #2





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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)).

Ten post edytował tsharek 28.09.2007, 14:19:15


--------------------
Go to the top of the page
+Quote Post
kombo
post 28.09.2007, 20:14:58
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.09.2007

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


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 "!#*"
Go to the top of the page
+Quote Post
tsharek
post 29.09.2007, 08:56:02
Post #4





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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.


--------------------
Go to the top of the page
+Quote Post
cicik
post 29.09.2007, 09:02:28
Post #5





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


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.


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
kombo
post 29.09.2007, 13:31:34
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.09.2007

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


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.
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: 19.07.2025 - 10:02