Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zapis pliku jako UTF-8
Forum PHP.pl > Forum > Przedszkole
Arhimenrius
Witam. Więc mam swój plik .csv, domyslnie jest zapisywany jako kodowanie windowsowe. w jaki sposób mogę przerobić ten plik na UTF-8?

  1.  
  2. //otwieram plik wysłany
  3. $file = "".$basedir."/".$csv."/".$name."";
  4. $fp = fopen($file, "r");
  5. flock($fp, 2);
  6. $tekst = fread($fp, filesize($file)); //przypisuje wartosc pliku do zmiennej
  7. $tekst = strtolower(iconv("cp1251","utf-8",$tekst)); //konwertuje kodowanie pliku na UTF-8
  8. flock($fp, 3);
  9. fclose($fp);
  10.  
  11. //tworze nowy plik
  12. $file2 = "".$basedir."/".$csv."/".$savename."";
  13. $fp = fopen($file2, "w+");
  14. flock($fp, 2);
  15. fwrite($fp, utf8_encode($tekst)); //Zapisuje przekodowany tekst do pliku
  16. flock($fp, 3);
  17. fclose($fp);
  18. unlink(''.$basedir.'/'.$csv.'/'.$name.''); //kasuje stary plik


wbrew pozorom to nie działa ;/ koduje do ISO ;|
poli25
ściągnij sobie notepada++ i zapisz w nim w odpowiednim formacie wink.gif
skowron-line
  1. <?php
  2. header('Content-type: text/html; charset=utf-8');
  3. file_put_contents('test.txt', 'abcdef');
Arhimenrius
hmm... na jakiej zasadzie to działa? Bo niezbyt rozumiem jak to użyć ;|
skowron-line
Cytat(Arhimenrius @ 29.02.2012, 12:48:51 ) *
hmm... na jakiej zasadzie to działa? Bo niezbyt rozumiem jak to użyć ;|

Nic trudnego, lektura manuala rozjaśni to co zaciemnione smile.gif
http://php.net/manual/en/function.header.php
ferrero2
Wystarczy zamiast:
file_put_contents('test.txt', $wynik);
Dać :
  1. $wynik = 'tutaj tekst nawet z polskimi znakami ĄĘŹĆ';
  2. $wynik = iconv("windows-1250","UTF-8", $wynik);
  3. file_put_contents('dane2.xml', $wynik);

i powinno latać

Pozdrawiam
Arhimenrius
to dalej nie pomaga... niestety...

  1. //otwieram plik wysłany
  2. $file = "".$basedir."/".$csv."/".$name."";
  3. $fp = fopen($file, "r");
  4. flock($fp, 2);
  5. $tekst = fread($fp, filesize($file)); //przypisuje wartosc pliku do zmiennej
  6. $tekst = strtolower(iconv("cp1251","utf-8",$tekst)); //konwertuje kodowanie pliku na UTF-8
  7. flock($fp, 3);
  8. fclose($fp);
  9.  
  10.  
  11. //tworze nowy plik
  12. file_put_contents(''.$basedir.'/'.$csv.'/'.$savename.'', $tekst);//Zapisuje przekodowany tekst do pliku

tak to teraz wygląda... tamten header umieściłem w index.php... więc jest, ale jakoś go nie widzi ;/
Crozin
@skowron-line: Prawdę powiedziawszy też nie wiem w czym wysłanie nagłówka HTTP miałoby tutaj pomóc.

1. Nie używaj utf8_encode, samo iconv wystarczy.
2. file_get_contents (po co bawić się z f*()) + iconv + file_put_contents. I o ile tekst wejściowy rzeczywiście jest w kodowaniu Windows-1251 to ostatecznie nowy plik zostanie zapisany w kodowaniu UTF-8. Pamiętaj tylko, że jeżeli będzie się składać jedynie z "podstawowych" znaków, nie odróżnisz UTF-8 od ASCII.
Arhimenrius
tekst wejściowy próbowałem w każdym możliwym kodowaniu (od windowsa do iso, różnymi liczbami), za każdym razem mniejsze lub większe krzaki... a samo iconv nie starczało, niby modyfikowało na utf, ale po tworzy się plik z kodowaniem windowsa. z utf8_encode tworzy się ISO (?!) A chodzi o to że później ten plik .csv jest wysyłany automatycznie do bazy MySQL i w niej nie widać polskich znaków...
Crozin
No to w takim razie pokaż:
1. Zawartość pierwszego pliku.
2. Maksymalnie uproszczony skrypt.
3. Zawartość drugiego pliku.

Oczywiście chodzi o bajty (Google: HEX Editor), a nie tekst w plikach.
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.