Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]UTF-8 a UTF-8 BOM
Forum PHP.pl > Forum > Przedszkole
Stef@n
Witam, szukałem na forum niestety odpowiedź nie znalazłem - chyba że gdzieś przeoczyłem. Sprawa wygląda tak. Mam plik CSV z danymi kodowany w UTF-8 i wszystko jest OK tekst się wyświetla prawidłowo z polskimi znakami. Problem jest jak chce porównać zmienną np.:
  1. <?php
  2. if($csv['nazwa'] == 'NAZWA')
  3. ?>

chodź zmienna $csv['nazwa'] ma wartość "NAZWA" to okazuje się że nie jest równa i warunek nie działa nawet wtedy jak nie ma tam polskich znaków! Po skonwertowania w Notanik++ pliku na UTF-8 bez BOM wszystko działa.

Moje pytanie to jaka jest w takim razie różnica między wartościami zmiennej $csv['nazwa'] przy UTF-8 a przy UTF-8 bez BOM. oraz jak rozwiązać problem lub skonwertować dany plik lub zmienną w php na UTF-8 bez BOM.

Pozdrawiam
YourFrog
1. http://pl.wikipedia.org/wiki/BOM_%28informatyka%29
2. strcmp


I nie powinno być problemu. Jeżeli dalej będziesz miał problemy to napisz jak odczytujesz plik bo są przynajmniej 4 metody na odczytanie pliku csv.
Stef@n
No niestety pokazuje nie działa. Plik csv otwieram mniej więcej tak
  1. <?php
  2. $dane = file($src_plik);
  3. for($i=0;$i<count($dane);$i++) {
  4. list($id[$i], $liczba[$i], $nazwa[$i]) = explode(";", $dane[$i]);
  5. }
  6. ?>
nospor
zrob
var_dump($csv['nazwa']);
a bedziesz wiedzial co dokladnie zawiera twoja tablica. To naprawde takie trudne?
YourFrog
@Stef@n
Widzisz bo utf-8 with BOM na początku posiada znacznik kolejności bajtów (w linku masz wyjaśnione). Ja zawsze 1 wiersz w csv pomijałem bo kazałem w nim dać użytkowniką nagłówki z nazwami kolumn.

Jeżeli nie chcesz mieć pierwszego wierszu z nagłówkami to musisz sprawdzać czy na początku pliku znajdują się jakieś nie pożadane znaki i je usuwać (3 pierwsze bajty).
Stef@n
Cytat(nospor @ 11.01.2014, 21:10:22 ) *
zrob
var_dump($csv['nazwa']);
a bedziesz wiedzial co dokladnie zawiera twoja tablica. To naprawde takie trudne?


wypluwa coś takiego
Cytat
string(8) "OSOBOWA"

Ta zmienia jest zawsze jako ostatnia w wierszu CSV czy nie ma tam może na końcu jakiegoś znaku przejścia do nowej linii "Enter"?
nospor
Cytat
Ta zmienia jest zawsze jako ostatnia w wierszu CSV czy nie ma tam może na końcu jakiegoś znaku przejścia do nowej linii "Enter"?
No przeciez widzisz, ze jsst.... OSOBOWA ma 7 znakow, a masz wyraznie napisane, ze string zawiera 8. Jest wiec jakis bialy znak, ktorego nie widac. Uzyjt trim i po sprawie
Stef@n
Dzięki wielkie pomogło... Taka mała pierdoła i robiła problem.
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.