Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Polskie znaki w emailach
Forum PHP.pl > Forum > PHP
EpureLight
Witam wszystkich ponownie. Po udanym rozwiązaniu problemu w wcześniejszego tematu mam kolejny, z tym samym formularzem kontaktowym.
Problem polega na tym, że w niektórych pocztach nie wyświetlają się polskie znaki. Tj. jak wyślę na pocztę @gmail.com to widać polskie znaki bez problemu. lecz po wysłaniu na pocztę @poczta.fm czy @onet.eu, czyli polskie poczty, znaki ukazują się jako takie krzaki. Nie wiem co jest złego w skrypcie. Strona na której znajduje się formularz ma kodowanie UTF-8

Przedstawiam skrypt:

  1. <?php
  2.  
  3. $EmailFrom = "test@test.pl";
  4. $EmailTo = "test@test.pl";
  5. $Subject = "Kontakt ze strony introzet.pl";
  6. $Name = Trim(stripslashes($_POST['Name']));
  7. $Corporate = Trim(stripslashes($_POST['Corporate']));
  8. $Adress = Trim(stripslashes($_POST['Adress']));
  9. $PostCode = Trim(stripslashes($_POST['PostCode']));
  10. $City = Trim(stripslashes($_POST['City']));
  11. $Email = Trim(stripslashes($_POST['Email']));
  12. $Tel = Trim(stripslashes($_POST['Tel']));
  13. $Message = Trim(stripslashes($_POST['Message']));
  14.  
  15. if($_POST['Copy'])
  16. {
  17. // prepare email body2 text
  18. $Body2 = "Oto kopia e-mailu który wysłałeś do nas z formularza kontaktowego:";
  19. $Body2 .= "\n";
  20. $Body2 .= "\n";
  21. $Body2 .= "\n";
  22. $Body2 .= "Imię i nazwisko: ";
  23. $Body2 .= $Name;
  24. $Body2 .= "\n";
  25. $Body2 .= "\n";
  26. $Body2 .= "Firma: ";
  27. $Body2 .= $Corporate;
  28. $Body2 .= "\n";
  29. $Body2 .= "\n";
  30. $Body2 .= "Ulica: ";
  31. $Body2 .= $Adress;
  32. $Body2 .= "\n";
  33. $Body2 .= "\n";
  34. $Body2 .= "Kod: ";
  35. $Body2 .= $PostCode;
  36. $Body2 .= "\n";
  37. $Body2 .= "\n";
  38. $Body2 .= "Miejscowość: ";
  39. $Body2 .= $City;
  40. $Body2 .= "\n";
  41. $Body2 .= "\n";
  42. $Body2 .= "Adres e-mail: ";
  43. $Body2 .= $Email;
  44. $Body2 .= "\n";
  45. $Body2 .= "\n";
  46. $Body2 .= "Numer telefonu: ";
  47. $Body2 .= $Tel;
  48. $Body2 .= "\n";
  49. $Body2 .= "\n";
  50. $Body2 .= "\n";
  51. $Body2 .= "Wiadomość: ";
  52. $Body2 .= "\n";
  53. $Body2 .= $Message;
  54. $Body2 .= "\n";
  55. mail($Email, $Subject, $Body2, "From: <$EmailFrom>");
  56. }
  57.  
  58. // validation
  59. $validationOK=true;
  60. if (!$validationOK) {
  61. header('location:error.html');
  62. }
  63.  
  64. // prepare email body text
  65. $Body = "";
  66. $Body .= "Imię i nazwisko: ";
  67. $Body .= $Name;
  68. $Body .= "\n";
  69. $Body .= "\n";
  70. $Body .= "Firma: ";
  71. $Body .= $Corporate;
  72. $Body .= "\n";
  73. $Body .= "\n";
  74. $Body .= "Ulica: ";
  75. $Body .= $Adress;
  76. $Body .= "\n";
  77. $Body .= "\n";
  78. $Body .= "Kod: ";
  79. $Body .= $PostCode;
  80. $Body .= "\n";
  81. $Body .= "\n";
  82. $Body .= "Miejscowość: ";
  83. $Body .= $City;
  84. $Body .= "\n";
  85. $Body .= "\n";
  86. $Body .= "Adres e-mail: ";
  87. $Body .= $Email;
  88. $Body .= "\n";
  89. $Body .= "\n";
  90. $Body .= "Numer telefonu: ";
  91. $Body .= $Tel;
  92. $Body .= "\n";
  93. $Body .= "\n";
  94. $Body .= "\n";
  95. $Body .= "Wiadomość: ";
  96. $Body .= "\n";
  97. $Body .= $Message;
  98. $Body .= "\n";
  99.  
  100. // send email
  101. $success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
  102.  
  103. // redirect to success page
  104. if ($success){
  105. header('location:contactthanks.php');
  106. }
  107. else{
  108. header('location:error.html');
  109. }
  110. ?>

bogdan89
nie przesyłasz informacji o kodowaniu w nagłówku wiadomości

  1. $headers = "MIME-Version: 1.0\n";
  2. $headers .= "Content-type: text/html; charset=utf-8\n";
  3. $headers .= "From: email@domena.pl\n";
  4.  
  5. //(...)
  6.  
  7. mail($Email, $Subject, $Body2, $headers);
tomaszdurka
Wyjaśnienie:
Większość błędnych skryptów wysyła dane o nieustawioym kodowaniu.
Tekst napisany przez ciebie w pliku PHP oraz w samej wiadomości (przez formularz) jest zapewne w formacie ANSI, więc wymaga ustawienia kodowania (ISO-8859-2 lub Windows'owe).
Klient poczty GMail prawidłowo "zgaduje" kodowanie twojej wiadomości i przydziela prawidłowe polskie iso lub windows.
PocztaFM jest oparta o starszego klienta - efekt widoczny.

Rozwiązanie 1:
Aby uniknąć wszelkich problemów, z jakimikolwiek językiem musisz po pierwsze (jak napisał przedmówca smile.gif ustawić kodowanie wiadomości na UTF-8.
Dodatkowo (szczególnie pod Windows) musisz jednak zmienić format ("kodowanie") pliku php na UTF-8. (Tutaj kodowanie pliku i wiadomosći to dwie rózne sprawy)
  1. ...
  2. $Body .= "Miejscowość: "; // przy ustawieniu nagłówka i braku zmiany formatu pliku ten tekst się "wykrzaczy"
  3. ...

Kodowanie pliku ustawisz w edytorze tekstu/HTML.


Rozwiązanie 2:
Jeżeli problemem będzie zmiana formatu pliku i nadal tekst będzie wplatany w .php, możesz pozostać przy ANSI i kodowaniu ISO.
W tym przypadku kodowanie "ISO-8859-2" ustawiasz w nagłównkach strony i maila. Kodowanie pliku pozostaje bez zmian - ANSI.
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.