Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Funkcja mail - brak polskich ogonków
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam kombinowałem już ze wszystkim i nadal mam problem z polskimi ogonkami przy wysyłaniu emaili
mam taki kod
  1. $result = $mysqli->query("SELECT * FROM prognoza INNER JOIN email ON prognoza.wid_miasto = email.email_wid_miasto WHERE wtime =$tmm AND wprecipIntensity BETWEEN 10 AND 20");
  2. while($row = mysqli_fetch_array($result)) {
  3. if(mail("".$row['adres']."", "Silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl")){
  4. echo 'Wiadomość została wysłana.';
  5. } else {
  6. echo 'Błąd przy wysyłaniu wiadomości.';
  7. }
  8. }

Zamiast miejscowość wysyłane jest miejscowoĹ›ci to samo jest z są.
Do kodu dodawałem już Content-type: text/html; charset=utf-8 nic to nie dawało.
Nawet w bazie danych dodałem kolumnę ze słowem miejscowości i nadal były krzaki. Zmieniałem kodowanie na UTF-8 oraz na UTF-8 bez BOM nadal nic.
Skończyły mi się już pomysły. Może komuś przyjdzie coś do głowy.
Neutral
Ustaw header w PHP na taki:

  1. header('Content-type: text/html; charset=utf-8');


https://www.w3.org/International/articles/http-charset/index

Sprawdź kodowanie odpowiednie i w bazie i np. konsoli Windows, jeśli jesteś na systemie Windows.

Jeśli po zmianie kodowania w bazie i w konsoli nadal będą się pojawiać nieprawidłowe znaki, to zaoraj bazę utwórz nową i nowe tabele - nie importuj, na nowo utwórz i sprawdź.

https://www.youtube.com/watch?v=9SnZMDONhFU
brzanek
Witam ponownie niestety te wskazówki nie pomogły. Nadal brakuje polskich ogonków.
viking
Pokaż w jaki sposób dodawałeś te nagłowki do maila. Dodatkowo mb_send_mail().
brzanek
Mam taki kod
  1. <?php
  2. include('db.php');
  3.  
  4. header('Content-type: text/html; charset=utf-8');
  5.  
  6. // pobieranie daty z bazy danych w formacie unix
  7. $result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =1 ORDER BY id ASC LIMIT 1");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. $tm = $row['wtime'];
  10. }
  11. // opady
  12. $result = $mysqli->query("SELECT * FROM prognoza INNER JOIN email ON prognoza.wid_miasto = email.email_wid_miasto WHERE wtime =$tm AND wprecipIntensity BETWEEN 10 AND 20");
  13. while($row = mysqli_fetch_array($result)) {
  14. if(mail("".$row['adres']."", "Silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl")){
  15. echo 'Wiadomość została wysłana.';
  16. } else {
  17. echo 'Bład przy wysyłaniu wiadomości.';
  18. }
  19. }
  20. $result = $mysqli->query("SELECT * FROM prognoza INNER JOIN email ON prognoza.wid_miasto = email.email_wid_miasto WHERE wtime =$tm AND wprecipIntensity BETWEEN 20 AND 50");
  21. while($row = mysqli_fetch_array($result)) {
  22. if(mail("".$row['adres']."", "Bardzo silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są bardzo silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl")){
  23. echo 'Wiadomość została wysłana.';
  24. } else {
  25. echo 'Bład przy wysyłaniu wiadomości.';
  26. }
  27. }
  28. $result = $mysqli->query("SELECT * FROM prognoza INNER JOIN email ON prognoza.wid_miasto = email.email_wid_miasto WHERE wtime =$tm AND wprecipIntensity BETWEEN 50 AND 150");
  29. while($row = mysqli_fetch_array($result)) {
  30. if(mail("".$row['adres']."", "Ekstremalne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są ekstremalne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl")){
  31. echo 'Wiadomość została wysłana.';
  32. } else {
  33. echo 'Bład przy wysyłaniu wiadomości.';
  34. }
  35. }


Wcześniej zamieniałem ś na \230 ale w wiadomości na emailu miałem słowo zamiast miejscowości to miejscowo ci
Wprowadzenie tej linii
  1. header('Content-type: text/html; charset=utf-8');

viking
Ale ty masz definiować header dla maila dodatkowo. Masz w dokumentacji opisane. Poza tym ktoś ci już mówił - zacznij używać sprawdzone paczki do mailingu typu phpmailer a będzie to dużo łatwiejsze.
brzanek
Dodając tak
  1. <?php
  2. include('db.php');
  3.  
  4. header('Content-type: text/html; charset=utf-8');
  5. $header = ('Content-type: text/html; charset=utf-8');
  6.  
  7. // pobieranie daty z bazy danych w formacie unix
  8. $result = $mysqli->query("SELECT * FROM prognoza WHERE wid_miasto =1 ORDER BY id ASC LIMIT 1");
  9. while ( $row = mysqli_fetch_array($result) ) {
  10. $tm = $row['wtime'];
  11. }
  12.  
  13. // opady
  14. $result = $mysqli->query("SELECT * FROM prognoza INNER JOIN email ON prognoza.wid_miasto = email.email_wid_miasto WHERE wtime =$tm AND wprecipIntensity BETWEEN 10 AND 20");
  15. while($row = mysqli_fetch_array($result)) {
  16. if(mail("".$row['adres']."", "Silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl", $header)){
  17. echo 'Wiadomość została wysłana.';
  18. } else {
  19. echo 'Bład przy wysyłaniu wiadomości.';
  20. }
  21. }


$header = ('Content-type: text/html; charset=utf-8');
  1. if(mail("".$row['adres']."", "Silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl", $header)){

Zmieniając na to
  1. if(mail("".$row['adres']."", "Silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", "From: info@pogoda-zachodniopomorskie.pl", ""$header"")){

Też nic nie daje nadal wysyłane są krzaczki.
Wyświetla mi się błąd przy wysyłaniu.
Używał bym phpmailer ale moje wiadomości będą różne nie będą zawsze takie same. Raz będą dotyczyły opadów a raz temperatury czy wiatru. Musiał bym zrobić kilka możliwości.
viking
Masz dodać nagłówek jako 4 parametr mail a nie 5. Dodatkowo po co piszesz "".$row['adres']."" zamiast samego $row['adres']?
brzanek
A widzisz chodzi dokładnie o ten 5 parametr.
Zrobiłem tak
  1. $result = $mysqli->query("SELECT * FROM prognoza INNER JOIN email ON prognoza.wid_miasto = email.email_wid_miasto WHERE wtime =$tm AND wprecipIntensity BETWEEN 10 AND 20");
  2. while($row = mysqli_fetch_array($result)) {
  3. if(mail("".$row['adres']."", "Silne opady", "".date("d.m.Y", $row['wtime'])." w miejscowości ".$row['miasto']." prognozowane są silne opady do ".ceil($row['wprecipIntensity'])." l/m2.", $header)){
  4. echo 'Wiadomość została wysłana.';
  5. } else {
  6. echo 'Bład przy wysyłaniu wiadomości.';
  7. }
  8. }

Działa ale teraz nie ma adresu kto wysyłał.
  1. $header = ("From: info@pogoda-zachodniopomorskie.pl", "Content-type: text/html; charset=utf-8");

Tak nie zadziałało.
viking
A czytasz ty w ogóle dokumentację czy strzelasz tylko?
brzanek
Zrobione dzięki
  1. $header = ('From: adres@adres.pl'. "\r\n" .'Content-type: text/html; charset=utf-8');
woojciech
Prócz zadeklarowania w phpmailerze kodowania - używa się aktualnie UTF-8 -
KONIECZNE jest zadeklarowania kodowania całej strony html,
bo formularz (pole treści maila w formularzu jak i inne wypełniane z klawiatury pola formularza) czerpie tę informację właśnie z
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />

Może być oczywiście wymuszenie przez polecenie header(), ale to polecenie musi być jako pierwsze na stronie html, co nie zawsze jest do zrobienia.
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.