Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: brak polskich znaków w formularzu kontaktowym
Forum PHP.pl > Forum > PHP
marxdesign
Witam, na mojej stronie umieściłem formularz kontaktowy, działa pięknie ale irytuje mnie jedno - a mianowicie maile wysyłane z formularza które otrzymuje na moją skrzynkę są wyświetlane mało czytelną czcionką (tak wygląda to wtedy gdy maile wysyłane są na gmaila)

http://img11.imageshack.us/img11/8249/scrv.jpg

A tak wygląda to kiedy maile wysyłane są na maila obsługiwanego programem pocztowym outloock. (w dodatku nie ma polskich znaków)

http://img21.imageshack.us/img21/4158/scrlw.jpg


poniżej przedstawiam poszczególne fragmenty mojego kodu:

plik: formularz.php
  1. <style type="text/css">
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. }
  6. body {
  7. font: 100% normal Arial, Helvetica, sans-serif;
  8. background: #161712;
  9. }
  10. form, input, select, textarea {
  11. margin:0;
  12. padding:0;
  13. color:#000;
  14. }
  15.  
  16. div.box {
  17. margin:0 auto;
  18. width:500px;
  19. background:#161712;
  20. position:relative;
  21. top:50px;
  22. border:1px solid #161712;
  23.  
  24. }
  25.  
  26. div.box h1 {
  27. color:#80197f;
  28. font-size:14px;
  29. text-transform:uppercase;
  30. padding:5px 0 5px 5px;
  31. }
  32.  
  33. div.box label {
  34. width:100%;
  35. display: block;
  36. background:#161712;
  37. border-top:1px solid #161712;
  38. border-bottom:1px solid #161712;
  39. padding:10px 0 10px 0;
  40. }
  41.  
  42. div.box label span {
  43. display: block;
  44. color:#fff;
  45. font-size:12px;
  46. float:left;
  47. width:100px;
  48. text-align:right;
  49. padding:5px 20px 0 0;
  50. }
  51.  
  52. div.box .wpis {
  53. padding:10px 10px;
  54. width:200px;
  55. background:#b4b4b4;
  56. border-bottom: 1px double #161712;
  57. border-top: 1px double #161712;
  58. border-left:1px double #161712;
  59. border-right:1px double #161712;
  60. }
  61.  
  62. div.box .wiadomosc {
  63. padding:7px 7px;
  64. width:350px;
  65. background:#b4b4b4;
  66. border-bottom: 1px double #161712;
  67. border-top: 1px double #161712;
  68. border-left:1px double #161712;
  69. border-right:1px double #161712;
  70. overflow:hidden;
  71. height:150px;
  72. }
  73.  
  74. div.box .button {
  75. margin:0 0 10px 0;
  76. padding:4px 7px;
  77. background:#80197f;
  78. border:0px;
  79. position: relative;
  80. top:10px;
  81. left:382px;
  82. width:100px;
  83. border-bottom: 1px double #161712;
  84. border-top: 1px double #161712;
  85. border-left:1px double #161712;
  86. border-right:1px double #161712;
  87. }
  88. }
  89. #contact_form #formularz label {
  90. color: #FFF;
  91. }
  92. </style>
  93. #komunikat#
  94. <div class="box">
  95. <form action="#strona#" method="post" id="formularz">
  96. <h1>Formularz kontaktowy :</h1>
  97. <label><span>Imie i Nazwisko</span> <input type="text" class="wpis" name="nick" id="nick" value="#nick#" />
  98. </label>
  99.  
  100. <label><span>Temat :</span>
  101. <input type="text" class="wpis" name="temat" id="temat" value="#temat#"/>
  102. </label>
  103. <label>
  104. <span>E-mail :</span>
  105. <input type="text" class="wpis" name="mail" id="mail" value="#mail#"/>
  106. </label>
  107. <label>
  108. <span>Wiadomość :</span>
  109. <textarea class="wiadomosc" name="tresc" id="tresc">#tresc#</textarea> </label>
  110. <label>
  111. <ul>
  112. <input name="Wyślij" type="submit" class="button" value="Wyślj" />
  113. </ul>
  114. </label>
  115. </form>
  116. </div>


mail.php
  1. <?php
  2.  
  3.  
  4. include ('ustawienia.php');
  5.  
  6. include('formularz.php');
  7. $formularz = ob_get_contents();
  8.  
  9.  
  10. function wyswietl_forme($komunikat='') {
  11. global $formularz;
  12.  
  13. $do_zmiany = array(
  14. '#komunikat#',
  15. '#strona#',
  16. '#nick#',
  17. '#mail#',
  18. '#temat#',
  19. '#tresc#'
  20. );
  21. $zmien_na = array(
  22. $komunikat,
  23. $_SERVER['REQUEST_URI'],
  24. $_POST['nick'],
  25. $_POST['mail'],
  26. $_POST['temat'],
  27. $_POST['tresc']
  28. );
  29.  
  30. $formularz = str_replace ( $do_zmiany, $zmien_na, $formularz);
  31.  
  32. return $formularz;
  33. }
  34.  
  35.  
  36. function waliduj() {
  37. global $komunikat;
  38. global $valid;
  39.  
  40. if( $valid['nick'] > 0 ) {
  41. if(strlen($_POST['nick']) < $valid['nick'] ){
  42. $walidacja['nick'] = $komunikat['nick'];
  43. }
  44. }
  45.  
  46. if( $valid['mail'] == 1 ) {
  47. if(!filter_var($_POST['mail'],FILTER_VALIDATE_EMAIL)) {
  48. $walidacja['mail'] = $komunikat['mail'];
  49. }
  50. }
  51.  
  52. if( $valid['temat'] > 0 ) {
  53. if(strlen($_POST['temat']) < $valid['temat'] ){
  54. $walidacja['temat'] = $komunikat['temat'];
  55. }
  56. }
  57.  
  58. if( $valid['tresc'] > 0 ) {
  59. if(strlen($_POST['tresc']) < $valid['tresc'] ){
  60. $walidacja['tresc'] = $komunikat['tresc'];
  61. }
  62. }
  63.  
  64. if(empty($walidacja)) {
  65. return 'true';
  66. }else{
  67. return $walidacja;
  68. }
  69.  
  70. }
  71.  
  72. // Działanie
  73. if (($_SERVER['REQUEST_METHOD'] == 'POST')) {// wejście postem
  74. $walidacja = waliduj();
  75.  
  76. if ($walidacja == 'true'){ //poprawnie wypełniony formularz
  77.  
  78. if(mail($adres_odbiorcy,"=?UTF-8?B?".base64_encode($_POST['temat'])."?=",'<p>Od: <b>'.$_POST['nick'].'</b></p><pre>'.$_POST['tresc'].'</pre>','From:'.$_POST['mail']."\r\nContent-Type: text/html; charset=utf-8")){ //sukces
  79. <div id="sukces">
  80. <p>'.$komunikat['sukces'].'</p>
  81. </div>
  82. ';
  83. }else{ //bląd serwera
  84. <div id="blad">
  85. <p>'.$komunikat['fail'].'</p>
  86. </div>
  87. ';
  88. print wyswietl_forme();
  89. }
  90.  
  91. }else{
  92. //błędna walidacja
  93. $blad_walidacji = $walidacja;
  94.  
  95. $blad_walidacji = '
  96. <div id="blad">
  97. <p>'.$komunikat['blad'].'</p>
  98. <ul>
  99. ';
  100. foreach ($walidacja as $wpis) {
  101. $blad_walidacji .= '<li>'.$wpis.'</li>';
  102. }
  103. $blad_walidacji .= '
  104. </ul>
  105. </div>
  106. ';
  107.  
  108. print wyswietl_forme($blad_walidacji);
  109. }
  110.  
  111. }else{
  112. // nowe wejście
  113. print wyswietl_forme();
  114. }
  115. ?>


ustawienia.php
  1. <?php
  2. /* Ustawienia formularza kontaktowego */
  3.  
  4. $adres_odbiorcy = 'uslugigraficzne@gmail.com'; //tu wpisz adres e-mail na który mają przychodzić wiadomości
  5.  
  6.  
  7.  
  8. /* Ustawienia wymaganych pól */
  9. /* Pamiętaj, żeby oznaczyć wymagane pola w formularzu - plik formularz.php */
  10.  
  11. $valid['nick'] = 2 ; // Nick: 0 - oznacza pole nieobowiązkowe, inna liczba minimalną ilość znaków jakie musi wpisać użytkownik
  12. $valid['mail'] = 1 ; // e-mail: 0 - oznacza pole nieobowiązkowe, 1 - pole wymagane
  13. $valid['temat'] = 3 ; // Temat: 0 - oznacza pole nieobowiązkowe, inna liczba minimalną ilość znaków jakie musi wpisać użytkownik
  14. $valid['tresc'] = 5 ; // Treść: 0 - oznacza pole nieobowiązkowe, inna liczba minimalną ilość znaków jakie musi wpisać użytkownik
  15.  
  16.  
  17.  
  18. /* Komunikaty */
  19.  
  20. $komunikat['sukces'] = 'Dziękujemy. Twoja wiadomość została wysłana.'; //Wiadomość po udanym wysłaniu formularza
  21. $komunikat['blad'] = 'Wiadomość <b>NIE</b> została wysłana. Popraw poniższe błędy.'; //Wiadomość przy błędzie w sprawdzaniu danych, błędy zostaną wymienione poniżej
  22. $komunikat['nick'] = 'Nick musi mieć min. 2 znaki.'; //Wpisz właściwą ilość znaków jeśli pole wymagane
  23. $komunikat['mail'] = 'Podaj poprawny adres e-mail.'; //Wiadomość po błędnym wpisaniu adresu e-mail
  24. $komunikat['temat'] = 'Temat musi mieć min. 3 znaki.'; //Wpisz właściwą ilość znaków jeśli pole wymagane
  25. $komunikat['tresc'] = 'Treść musi mieć min. 5 znaków'; //Wpisz właściwą ilość znaków jeśli pole wymagane
  26. $komunikat['fail'] = 'Przepraszamy wystąpił chwilowy błąd. Spróbuj ponownie później'; //W przypadku nieudanego wyslania wiadomości np. błędu serwera
  27.  
  28. ?>





Fifi209
Ustaw kodowanie plików na utf8 bez BOM.
marxdesign
otworzyłem te wszystkie pliki i zapisałem jeszcze raz wybierajac kodowanie utf8

i niestety nic się nie zmieniło


Różnicę witać już przy wypełnianiu danych formularza

http://img194.imageshack.us/img194/1586/scra0.jpg
Quadina
A strona wyświetlana jest w jakim kodowaniu? Jeżeli używasz kodowania iso, to dane do formularza przeglądarka wpisze w ISO, później wyśle w czymś trudno nazywalnym ISO w utf8. Spróbuj pokombinować z meta i sprawdź czy pliki na pewno zapisane są w utf8.
  1. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
BlackPig
Problemem marxdesign był właśnie brak meta tagu z kodowaniem, dodatkowo złe nagłówki w wysyłanym mailu... Wysłał do mnie w tej sprawie maila, na którego najpierw odpisałem kodem gotowej funkcji:
  1. function sendmail($adres,$tresc,$temat){
  2. $to = $adres;
  3. $subject = $temat;
  4. $message = $tresc;
  5. $naglowki="MIME-Version: 1.0\r\n";
  6. $naglowki.="Content-type: text/html; charset=utf-8\r\n";
  7. $naglowki.="From: no-reply@twojadomena.pl<no-reply@twojadomena.pl>\r\n";
  8.  
  9. mail($to, $subject, $message, $naglowki);
  10. }

Z informacją, że jeśli to nie wystarczy, to za poprawę formularza wg wytycznych proponuję 50 PLN, na co marxdesign się zdecydował smile.gif
Poprawiłem problem z kodowaniem, potem marxdesign poprosił jeszcze o kilka zmian, które naniosłem, a potem marxdesign już się nie odezwał... Na GG się odezwał, ale rozmowa była krótka:
  1. marxdesign
  2. 12:30:22
  3. Witam, teraz jestem. O co chodzi?
  4. blackpig
  5. 12:40:09
  6. Witam pisałem w sprawie formularza kontaktowego
  7. 12:40:34
  8. bo coś przestał się Pan odzywać na mailu

i tutaj znowu cisza...
Generalnie nie mam w zwyczaju brać zaliczek, czy podpisywać umów na takie pierdoły, a zdecydowana większość ludzi jeżeli coś się dla nich zrobi na poczekaniu i jeszcze w godzinach wieczornych jest mile zaskoczona, posyła przelew i bardzo dziękuje... pozostaje te kilka procent, które ma problemy nie tylko z HTML-em na poziomie przedszkola (pomimo ukończonych studiów wyższych i oferowania usług w tym zakresie), ale również z podstawowymi zasadami cywilizowanego zachowania się wobec pozostałych istot winksmiley.jpg
To pierwsze od biedy idzie jeszcze wkleić na forum i skopiować do kodu strony, ale bez tego drugiego świetlanej przyszłości w branży nie wróżę winksmiley.jpg
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.