Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie pliku CSV - dane z formularza bez polskich znaków
Forum PHP.pl > Forum > Przedszkole
KamilSTI
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ść.
nospor
Naprawde uwazasz ze ma to jakikolwiek zwiazek z OOP? Patrz prosze gdzie zakladasz tematy. Przenosze
Pyton_000
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?
KamilSTI
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.
Pyton_000
To jeszcze ustaw na początku pliku PHP:

  1. header('Content-Type: charset=utf-8');
KamilSTI
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
viking
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.
KamilSTI
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.
viking
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.
KamilSTI
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);
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.