Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]zapis pliku jako UTF-8
Arhimenrius
post 29.02.2012, 10:30:54
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 3
Dołączył: 19.04.2011

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


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 ;|

Ten post edytował Arhimenrius 29.02.2012, 10:31:08
Go to the top of the page
+Quote Post
poli25
post 29.02.2012, 10:35:05
Post #2





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


ściągnij sobie notepada++ i zapisz w nim w odpowiednim formacie wink.gif
Go to the top of the page
+Quote Post
skowron-line
post 29.02.2012, 10:43:03
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. <?php
  2. header('Content-type: text/html; charset=utf-8');
  3. file_put_contents('test.txt', 'abcdef');


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Arhimenrius
post 29.02.2012, 12:48:51
Post #4





Grupa: Zarejestrowani
Postów: 115
Pomógł: 3
Dołączył: 19.04.2011

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


hmm... na jakiej zasadzie to działa? Bo niezbyt rozumiem jak to użyć ;|
Go to the top of the page
+Quote Post
skowron-line
post 29.02.2012, 14:08:41
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


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


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
ferrero2
post 29.02.2012, 15:43:29
Post #6





Grupa: Zarejestrowani
Postów: 171
Pomógł: 32
Dołączył: 5.08.2008
Skąd: Lublin

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


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

Ten post edytował ferrero2 29.02.2012, 15:44:14


--------------------
---------------------------
"Jeżeli trzeci dzień z rzędu nie chce Ci się pracować tzn że dziś jest ŚRODA !
Algorytmy , Programowanie , Tworzenie WWW - SPRAWDŹ
Go to the top of the page
+Quote Post
Arhimenrius
post 29.02.2012, 18:37:20
Post #7





Grupa: Zarejestrowani
Postów: 115
Pomógł: 3
Dołączył: 19.04.2011

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


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 ;/

Ten post edytował Arhimenrius 29.02.2012, 18:39:46
Go to the top of the page
+Quote Post
Crozin
post 29.02.2012, 19:06:22
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@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.
Go to the top of the page
+Quote Post
Arhimenrius
post 29.02.2012, 19:08:23
Post #9





Grupa: Zarejestrowani
Postów: 115
Pomógł: 3
Dołączył: 19.04.2011

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


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

Ten post edytował Arhimenrius 29.02.2012, 19:12:07
Go to the top of the page
+Quote Post
Crozin
post 29.02.2012, 19:16:30
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
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: 14.05.2025 - 09:38