Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z kodowaniem w mailach
Forum PHP.pl > Forum > PHP
trickster00
Witam,

Przeczytałem sporo na temat mojego problemu, użyłem wiele razy wujka googla ale niestety nie znalazłem jednoznacznej odpowiedzi na moje pytanie (2 razy natknąłem się na to że to problem "wp vs reszta świata"). Mam skrypt bazy klientów który wysyła maile informujące o nowościach itp (szablony maili są w plikach html). Problem polega na tym że cały skrypt bazy napisany jest na utf-8, szablony również. Na podglądzie wysłanego maila również wszystko jest ok. Jednak gdy mail już wyjdzie jest wyświetlany poprawnie na praktycznie wszystkich skrzynkach prócz wp.pl i koszmail.pl.

Dość dziwna sprawa bo dostaję na pocztę wp maile również w kodowaniu utf-8 i wyświetlane są poprawnie. A więc mamy krzaczki na wp i tutaj bawił bym się bardziej z kodowaniem jednak wp wywala komunikat :
Cytat
W tresci wykryto rozne kodowania znakow narodowych.
Jesli w ponizszej tresci widzisz krzaczki zamiast znakow narodowych, kliknij link alternatywne kodowanie.

Jak klikamy na "alternatywne kodowanie" to wyświetla się poprawnie.

Czy ktoś może poradzić o co z tym chodzi? Nie działa praktycznie tylko na wp, próbowałem zmian na iso 8859-2, próbowałem zmieniać znaki na UNICODE. Najdziwniejsze że tytuł maila jest wyświetlany poprawnie.

Bardzo proszę o pomoc i pozdrawiam smile.gif

naprawdę nikt nie wie co z tym zrobić?
Wave
UNICODE = UTF. Ustaw kodowanie UTF-8 bez BOM. Jak to nie pomoże to pokaż fragment ładowania i wysyłania pliku html. Pokaż też jak jest zapisany temat.
trickster00
Zmieniłem szablony na kodowanie bez BOM i dalej to samo.

  1. case 'send_mail':
  2. require("php_files/usefulfunctions.php");
  3. if(isset($_POST['cancel_email_button'])) {
  4. header("Location: search.php?page=".$_POST['currentPage']."&sort=".$_POST['currentSort']);
  5. }
  6. else {
  7. $mail_sender = $_POST['mail_sender'];
  8. $mail_rcps = $_POST['mail_rcps'];
  9. $mail_title = $_POST['mail_title'];
  10. $mail_content = strtr($_POST['mail_content'], "\\", " ");
  11. $mail_headers = "MIME-Version: 1.0\r\n";
  12. $mail_headers .= "Content-type: text/html; charset: UTF-8\r\n";
  13. $mail_headers .= "From: ".$mail_sender."\r\n";
  14. $mail_result = "";
  15. $mail_add_history_msg = "Wysłana oferta.";
  16.  
  17. $rcpsArray = explode(", ", $mail_rcps);
  18. for($i = 0; $i < sizeof($rcpsArray); $i++) {
  19. if(mail($rcpsArray[$i], $mail_title, $mail_content, $mail_headers)) {
  20. $_SESSION['mail_msg'] .= "<img src=\"images/good_green_mark.png\" /> ".
  21. "Wiadomość pod adres <span style=\"font-weight: bold;\">".$rcpsArray[$i].
  22. "</span> została wysłana pomyślnie.<br />";
  23. }
  24. else {
  25. $_SESSION['mail_msg'] .= "<img src=\"images/error_red_cross.png\" /> ".
  26. "Wystąpił błąd podczas wysyłania wiadomości pod adres <span style=\"font-weight: bold;\">".
  27. $rcpsArray[$i]."</span><br />";
  28. }
  29. $get_client_id_query = "SELECT IDKlienta FROM klienci WHERE Email = '".$rcpsArray[$i]."'";
  30. $get_client_id_result = mysql_query($get_client_id_query) or die(mysql_error());
  31. $get_client_id = mysql_result($get_client_id_result, 0);
  32. mysql_free_result($get_client_id_result);
  33. changeDOKEmail($get_client_id);
  34. $add_history_query = "INSERT INTO historia VALUES(".
  35. $get_client_id.", NOW(), '".$mail_add_history_msg."', ".intval($_SESSION['user_id']).")";
  36. $add_history_result = mysql_query($add_history_query) or die(mysql_error());
  37. $update_dnkemail_query = "UPDATE klienci SET DataNastepnegoKontaktuEmail = DATE_ADD(DataOstatniegoKontaktuEmail,INTERVAL 30 DAY) ".
  38. "WHERE Email = '".$rcpsArray[$i]."'";
  39. $update_dnkemail_result = mysql_query($update_dnkemail_query) or die(mysql_error());
  40. }
  41.  
  42. header("Location: search.php?page=".$_POST['currentPage']."&sort=".$_POST['currentSort']);
  43.  
  44. }


na prawdę nikomu nie wywaliło takiego błędu na wp ?
Wave
Przesyłasz dane formularzem, nie ładujesz ich bezpośrednio z pliku (file(), fopen(), etc.). Takie dane mogą mieć kodowanie ustawione przez przeglądarkę, zapewne Windowsowe.

Spróbuj konwertować tekst za pomocą iconv.
Kod
$_POST['mail_content'] = iconv('cp1250', 'utf-8', $_POST['mail_content'] );

Ewentualnie sprawdź kodowanie funkcją mb_detect_encoding.
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.