Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Formularz kontaktowy
Forum PHP.pl > Forum > Przedszkole
-pietro-
Wstawiłem na stronę html skrypt formularza kontaktowego znaleziony w internecie. Przy testowaniu wszystko było OK, bo do testów używałem swojej skrzynki na poczta.interia.pl. Natomiast gdy maile zaczeły byc wysyłane na skrzynke poczta.o2.pl, zaczeły się problemy, bo wiadomości zaczeły dochodzic bez polskich znaków.


Skrypt wygląda tak. Jeśli możecie mi doradzic co zmienic , i dokładnie w którym miejscu - będę bardzo wdzięczny.
  1. <?php
  2.  
  3.  
  4. if(isset($_POST['Email_Address'])) {
  5.  
  6. include 'freecontactformsettings.php';
  7.  
  8. function died($error) {
  9. echo "Sorry, but there were error(s) found with the form you submitted. ";
  10. echo "These errors appear below.<br /><br />";
  11. echo $error."<br /><br />";
  12. echo "Please go back and fix these errors.<br /><br />";
  13. die();
  14. }
  15.  
  16. if(!isset($_POST['Full_Name']) ||
  17. !isset($_POST['Email_Address']) ||
  18. !isset($_POST['Telephone_Number']) ||
  19. !isset($_POST['Your_Message']) ||
  20. !isset($_POST['AntiSpam'])
  21. ) {
  22. died('Niestety występuje problem w formularzu.');
  23. }
  24.  
  25. $full_name = $_POST['Full_Name']; // required
  26. $email_from = $_POST['Email_Address']; // required
  27. $telephone = $_POST['Telephone_Number']; // not required
  28. $comments = $_POST['Your_Message']; // required
  29. $antispam = $_POST['AntiSpam']; // required
  30.  
  31. $error_message = "";
  32.  
  33. $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  34. if(preg_match($email_exp,$email_from)==0) {
  35. $error_message .= 'Wprowadzony adres e-mail nie jest poprawny.<br />';
  36. }
  37. if(strlen($full_name) < 2) {
  38. $error_message .= 'Nazwisko zostało błędnie wpisanenie.<br />';
  39. }
  40. if(strlen($comments) < 2) {
  41. $error_message .= 'Wpisz wiadomość.<br />';
  42. }
  43.  
  44. if($antispam <> $antispam_answer) {
  45. $error_message .= 'Odpowiedź na pytanie nie jest prawidłowa.<br />';
  46. }
  47.  
  48. if(strlen($error_message) > 0) {
  49. died($error_message);
  50. }
  51. $email_message = "Wiadomość wysłana ze strony wykrojekrawieckie.pl.\r\n";
  52.  
  53. function clean_string($string) {
  54. $bad = array("content-type","bcc:","to:","cc:");
  55. return str_replace($bad,"",$string);
  56. }
  57.  
  58. $email_message .= "Imię i nazwisko: ".clean_string($full_name)."\r\n";
  59. $email_message .= "e-mail: ".clean_string($email_from)."\r\n";
  60. $email_message .= "Telefon: ".clean_string($telephone)."\r\n";
  61. $email_message .= "Wiadomość: ".clean_string($comments)."\r\n";
  62.  
  63. $headers = 'From: '.$email_from."\r\n".
  64. 'Reply-To: '.$email_from."\r\n" .
  65. 'X-Mailer: PHP/' . phpversion();
  66. mail($email_to, $email_subject, $email_message, $headers);
  67. header("Location: $thankyou");
  68. ?>
  69. <script>location.replace('<?php echo $thankyou;?>')</script>
  70. <?php
  71. }
  72. die();
  73. ?>
gitbejbe
treść wiadomości zacznij od:

$email_message="Content-Type: text/html; charset=utf8";

przed założeniem tematu szukaj na forum, bo parę dni temu tez ktoś pisał o tym problemie
-pietro-
Słabo znam się na php. Jak narazie maile dochodzą bez polskich liter. Moze mi ktos podac w którym to ma byc dokładnie miejscu??
-pietro-
W którym dokładnie miejscu trzeba wstawic ta linijkę z kodowaniem?questionmark.gif?
b4rt3kk
Koledze kilka postów wyżej chodziło chyba o dodanie odpowiednich nagłówków. Daj sobie takie headers:

  1. $headers = 'MIME-Version: 1.0' . "\r\n";
  2. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
-pietro-
Nagłówek dopisany.
Kodowanie strony html ustawione na charset=utf-8
Kodowanie w edytorze utf-8

a wiadomości wysyłane tak:
">ęśżź po ile kopa jajek?questionmark.gif

nadak przychodzą tak:
">ęśżź po ile kopa jajek?questionmark.gif
gorden
spróbuj przekonwertować w edytorze na utf8 bez bom (w notepad++: format > konwertuj na utf-8 bez bom)
jeśli to nie pomoże, spróbuj dodać na początek kodu php:
  1. header('Content-type: text/html; charset=utf-8');


jeśli to nie pomoże, sprawdź w treści maila (np. echo $email_message) przed jego wysłaniem, czy w samej zmiennej występują polskie znaki
Gość
Mam polskie litery. Nie wiem tak do koncz co pomogło, czy konwertacja bez boom, czy cos innego.

Teraz kod wyglada nastepujaco:
  1. $headers = 'From: '.$email_from."\r\n".
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. 'Reply-To: '.$email_from."\r\n" .


Problem sie pojawił, że teraz wszystko sie zlewa:
Było tak:
  1. Imię i nazwisko: ania ania
  2. e-mail: ania@ania.pl
  3. Telefon: 16 18
  4. Wiadomość:


A jest tak:
  1. Imię i nazwisko: ania ania e-mail: ania@ania.pl Telefon: 16 44 Wiadomość:

b4rt3kk
Tam gdzie chcesz mieć przełamanie linii daj znacznik HTML-owy <br/>.
Turson
Następujący kod u mnie działa prawidłowo. UTF-8 BEZ BOM
  1. $naglowek .="Content-type: text/html; charset=utf-8";
  2. $temat= "=?UTF-8?B?".base64_encode("Rejestracja")."?=";
  3. $tresc = 'Witaj blabla bla';
  4. mail($mail,$temat,$tresc,$naglowek);
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.