Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Polskie znaki formularz (przeglądałem inne tematy)
Forum PHP.pl > Forum > Przedszkole
Korybut
Witam.

Jestem nowy i dopiero zaczynam zabawę z PHP. I już na początku mam mały problem. Mianowicie wysyłanie wiadomości z formularza umieszczonego na stronie przebiega pomyślnie. Jednak w treści wiadomości brakuje polskich znaków. Próbowałem na różne sposoby określać kodowanie w sekcji $headers jednak bez większego skutku, a dodatkowo maile zaczęły schodzić do spamu, ale to raczej nie ma związku.

Dlatego mam prośbę jakby ktoś mógł zerknąć i powiedzieć gdzie tkwi problem.

  1. <?php
  2. if($_POST)
  3. {
  4. $to_Email = "alka65@wp.pl"; //Podaj tu email docelowy
  5. $subject = 'Wiadomość ze strony Opiekun - Fryzjer. WAŻNE!'; //Tutaj temat wiadomości - możesz też wykorzystać pole formularza i pobrać tą wartość od klienta :)
  6.  
  7.  
  8. //Sprawdzamy czy jest to rządanie Ajax, jeśli nie..
  9. if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
  10.  
  11. //Kończymy skrypt wysyłając dane JSON
  12. $output = json_encode(
  13. 'type'=>'error',
  14. 'text' => 'Rządanie musi przejść przez AJAX'
  15. ));
  16.  
  17. die($output);
  18. }
  19.  
  20. //Sprawdzamy czy wszystkie pola zostały wysłane. kończymy skrypt jeśli nie (tutaj dodawaj więcej pól, które są wymagane)
  21. if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userPhone"]) || !isset($_POST["userMessage"]))
  22. {
  23. $output = json_encode(array('type'=>'error', 'text' => 'POLA SĄ PUSTE!'));
  24. die($output);
  25. }
  26.  
  27. //Pobieramy dane z formularza
  28. $user_Name = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
  29. $user_Email = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
  30. $user_Phone = filter_var($_POST["userPhone"], FILTER_SANITIZE_STRING);
  31. $user_Message = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);
  32.  
  33. //Dodatkowa validacja PHP (tylko dla pól wymaganych)
  34. if(strlen($user_Name)<4) // Wywala błąd jeśli imię ma mniej niż 4 znaki
  35. {
  36. $output = json_encode(array('type'=>'error', 'text' => 'Imię jest za krótkie!'));
  37. die($output);
  38. }
  39. if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //sprawdzamy email
  40. {
  41. $output = json_encode(array('type'=>'error', 'text' => 'Proszę podać poprawny email!'));
  42. die($output);
  43. }
  44. if(!is_numeric($user_Phone)) //sprawdzamy czy telefon jest numeryczny
  45. {
  46. $output = json_encode(array('type'=>'error', 'text' => 'Tylko liczby są dozwolone'));
  47. die($output);
  48. }
  49. if(strlen($user_Message)<5) //Sprawdzamy czy wiadomość ma więcej niż 5 znaków
  50. {
  51. $output = json_encode(array('type'=>'error', 'text' => 'Wiadomość za krótka! Wpisz coś jeszcze.'));
  52. die($output);
  53. }
  54.  
  55. //Nagłówki do Maila
  56. $headers = 'From: '.$user_Email.'' . "\r\n" . 'Reply-To: '.$user_Email.'' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
  57. $headers .= "Content-type: text/plain; charset=utf-8\r\n";
  58.  
  59. $sentMail = @mail($to_Email, $subject, 'Witaj Alu. Klient '.$user_Name .' wysłał/a Ci wiadomość o treści: '. "\r\n".$user_Message . "\r\n" . ' Jeśli chcesz odpisać to napisz na email - '.$user_Email .', lub zadzwoń pod numer -'.$user_Phone, $headers);
  60.  
  61. if(!$sentMail)
  62. {
  63. $output = json_encode(array('type'=>'error', 'text' => 'Nie można wysłać wiadomości. Sprawdź konfigurację PHP Mail'));
  64. die($output);
  65. }else{
  66. $output = json_encode(array('type'=>'message', 'text' => 'Witaj '.$user_Name .' Dziękuję za wiadomość!'));
  67. die($output);
  68. }
  69. }
  70. ?>


Dodam, że jest to formularz wysyłany bez przeładowywania, z pomocą AJAX'a.
salfunglandyare
Linia 58: $headers
Korybut
Niestety nie w literówce tkwi błąd.

Próbowałem z tym headers na kilka sposobów, i żaden nie zadziałał.
SwiezuPL
Kodowanie pliku?
Korybut
Wszystkie pliki UTF-8
salfunglandyare
Ale chwila smile.gif polskich znaków nie ma na pewno w temacie,
  1. $subject = '=?utf-8?B?'.base64_encode('Wiadomość ze strony Opiekun - Fryzjer. WAŻNE!').'?=';


Polskie znaki powinny być poprawnie umieszczone w treści wiadomości
Korybut
Cytat(salfunglandyare @ 4.05.2015, 16:40:59 ) *
Ale chwila smile.gif polskich znaków nie ma na pewno w temacie,
  1. $subject = '=?utf-8?B?'.base64_encode('Wiadomość ze strony Opiekun - Fryzjer. WAŻNE!').'?=';


Polskie znaki powinny być poprawnie umieszczone w treści wiadomości


W temacie polskie znaki są tylko przed odczytaniem wiadomości. Po jej otwarciu zamiast ą ę itp. są bliżej nieokreślone litery.

Edit: Twój kod poprawił jedynie kodowanie tytułu wewnątrz wiadomości.
salfunglandyare
Ta część:
  1. 'Witaj Alu. Klient '.$user_Name .' wysłał/a Ci wiadomość o treści: '. "\r\n".$user_Message . "\r\n" . ' Jeśli chcesz odpisać to napisz na email - '.$user_Email .', lub zadzwoń pod numer -'.$user_Phone;//..


Czy fraza "[..]wiadomość o treści[...]" pokazuje poprawnie polskie znaki, a dopiero wiadomość napisana przez użytkownika ma błędne znaki, czy cała treść wygląda błędnie? Czy znaczki są w postaci encji &#x123, czy w postaci brzydkich znaczków lub znaków zapytania?

Spróbuj:
* wyrzucić filter_var dla wiadomości,
* sprawdzić nagłówki wiadomości e-mail (ctrl+u w thunderbirdzie, w innych pewnie podobnie) - tam sprawdź, jakie rzeczywiście kodowanie zostało ustawione
Korybut
w wiadomości wygląda to tak:

Cytat
Witaj Alu. Klient FADAWDAW wysłał/a Ci wiadomość o treści:
Zażółć gęślą jaźń


A to ciekawostka! nerdsmiley.png
Wychodzi na to, że problem pojawia się na poczcie WP. zmieniłem adres do korespondencji i np. na gmail'u wszystko pojawia się prawidłowo. Co jednak nie zmienia faktu, że gdzieś w kodzie siedzi błąd wink.gif
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.