Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie pliku CSV - dane z formularza bez polskich znaków
KamilSTI
post 23.11.2017, 11:18:40
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.05.2011

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


Witam,
Mam problem z zapisem danych z formularza do pliku CSV tzn. sam zapis działa bez problemu, ale gdy otwieram plik to zamiast polskich znaków mam krzaczki.
Domyślam się że chodzi o kodowanie i pewnie wystarczy dopisać jedną lub dwie linijki kodu ale jestem początkujący w PHP i nie za bardzo wiem gdzie tkwi problem.


  1. <?php
  2. if ($_POST)
  3. {
  4. $name = $_POST['name'] ? $_POST['name'] : null;
  5. $email = $_POST['email'] ? $_POST['email'] : null;
  6. $tel = $_POST['tel'] ? $_POST['tel'] : null;
  7. $nazwa_w = $_POST['nazwa_warsztatu'] ? $_POST['nazwa_warsztatu'] : null;
  8. $radios = $_POST['radios'] ? $_POST['radios'] : null;
  9.  
  10. // wpisz temat wiadomości
  11. $subject = 'Potwierdzenie zgłoszenia';
  12.  
  13. //wpisz treść wiadomości w htmlu
  14. $message = '
  15. <html>
  16. <head>
  17. </head>
  18. <body>
  19. <h1>Potwierdzenie zgłoszenia</h1>
  20. <p>Witaj '.$name.',</p>
  21. <p>zostałeś zapisany</p>
  22. </body>
  23. </html>
  24. ';
  25.  
  26. $filename = 'PLIKI/'.$nazwa_w.'.csv';
  27.  
  28. $mode = 'a';
  29.  
  30. $content = $name.';'.$email.';'.$tel.';'.$radios.PHP_EOL;
  31.  
  32. if (!$handle = fopen($filename, $mode))
  33. {
  34. echo 'Nie można otworzyć pliku...';
  35. }
  36.  
  37. if (fwrite($handle, $content) === FALSE) {
  38. echo 'Nie można zapisać danych...';
  39. }
  40.  
  41. $headers[] = 'MIME-Version: 1.0';
  42. $headers[] = 'Content-type: text/html; charset=utf-8';
  43. $headers[] = 'To: '.$name.'<'.$email.'>';
  44. $headers[] = 'From: Potwierdzenie <test@domena.pl>';
  45.  
  46. if (!mail($email, $subject, $message, implode("\r\n", $headers)))
  47. $err = 'Nie można wysłać wiadomości'; // komunikat o błędzie przy wysyłaniu maila
  48. else
  49. $success = '<div class="row alert success_box">
  50. <div class=" alert alert-success" role="alert">
  51. <a>Zgłoszenie zostało wysłane pomyślnie. Wkrótce otrzymasz email z potwierdzeniem.<a>
  52. </div>
  53. </div>'; // komunikat gdy wiadomość ok
  54.  
  55. fclose($handle);
  56. }
  57. ?>


Dodam jeszcze, że gdy formularz zostanie wysłany użytkownik otrzyma maila z potwierdzeniem gdzie są jego dane np. imię i nazwisko i tam są polskie znaki.


Z góry dziękuję za pomoc i wyrozumiałość.
Go to the top of the page
+Quote Post
nospor
post 23.11.2017, 11:19:56
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Naprawde uwazasz ze ma to jakikolwiek zwiazek z OOP? Patrz prosze gdzie zakladasz tematy. Przenosze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 23.11.2017, 11:23:40
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czy plik PHP który zapisuje plik CSV jest zpisany w kodowaniu utf-8?
W czym otwierasz ten plik csv. System, program. Ustawiasz kodowanie UTF-8 w programie i nadal krzaki?
Go to the top of the page
+Quote Post
KamilSTI
post 23.11.2017, 12:58:49
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.05.2011

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


Cytat(Pyton_000 @ 23.11.2017, 11:23:40 ) *
Czy plik PHP który zapisuje plik CSV jest zpisany w kodowaniu utf-8?
W czym otwierasz ten plik csv. System, program. Ustawiasz kodowanie UTF-8 w programie i nadal krzaki?


Na kodowanie pliku php nie wpadłem ale właśnie próbowałem różnych opcji (UTF-8, UTF-8 With BOM, Windows 1250) i nadal to samo.
Plik CSV otwieram excel 2016. jak zmienie kodowanie w pliku na UTF-8 to krzaki pozostają ale jak ręcznie wpiszę "ę" i zapiszę to zostaje dobrze ale skrypt PHP dalej swoje.
Go to the top of the page
+Quote Post
Pyton_000
post 23.11.2017, 13:01:19
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To jeszcze ustaw na początku pliku PHP:

  1. header('Content-Type: charset=utf-8');
Go to the top of the page
+Quote Post
KamilSTI
post 23.11.2017, 13:08:48
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.05.2011

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


Cytat(Pyton_000 @ 23.11.2017, 13:01:19 ) *
To jeszcze ustaw na początku pliku PHP:

  1. header('Content-Type: charset=utf-8');



Czyli zaraz po <?php tak ?

Niestety nadal krzaczki sad.gif
Go to the top of the page
+Quote Post
viking
post 23.11.2017, 13:40:40
Post #7





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

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


Do zarządzania plikami csv jest http://php.net/manual/pl/function.fgetcsv.php chyba że chcesz sobie sieczkę w pliku zrobić. Kodowanie znaków w mailu też nie działa.


--------------------
Go to the top of the page
+Quote Post
KamilSTI
post 23.11.2017, 14:15:26
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.05.2011

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


Cytat(viking @ 23.11.2017, 13:40:40 ) *
Do zarządzania plikami csv jest http://php.net/manual/pl/function.fgetcsv.php chyba że chcesz sobie sieczkę w pliku zrobić. Kodowanie znaków w mailu też nie działa.


Pomógłbyś mi zmodyfikować kod ? Kombinuje na różne sposoby i albo nie ma efektu ale jakieś błędy mi wywala.
Go to the top of the page
+Quote Post
viking
post 23.11.2017, 14:20:03
Post #9





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

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


W komentarzach do obu funkcji masz jak zapisać w utf-8. Nie wiem jak w 2016 ale wcześniej były błędy i trzeba było przepychać bom.


--------------------
Go to the top of the page
+Quote Post
KamilSTI
post 29.11.2017, 15:27:01
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 8.05.2011

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


Zadziałało dopisanie jednej linijki do zmiany kodowania ale nie (jak większość forum sugeruje) na UTF-8 tylko na 'windows-1250'

  1. $content = iconv("utf-8", "windows-1250", $content);
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: 23.05.2025 - 08:07