Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja mail(), a Polskie znaki
Forum PHP.pl > Forum > PHP
ShamY
Witam,
szukałem na Google, jednak żadne znalezione przeze mnie rozwiązanie nie pasuję do mojego kodu.
Otóż gdy otrzymuję adres e-mail z mojej strony (funckaj mail()), to zamiast Polskich znaków są krzaczki. Kodowanie strony jest w utf8, i jego zmiana nie pomaga. Za każdym razem jest to samo, byłym bardzo wdzięczny jakby ktoś pokazał mi w któym miejscu mojego kodu coś dodać, aby to zaskoczyło...

  1. <?php
  2.  
  3. if (empty($_POST['submit'])) {
  4.  
  5. echo "<table border=\"0\"><form method=\"post\">
  6. <tr>
  7. <td>Imię:*</td>
  8. <td><input type=\"text\" name=\"imie\" style=\"width: 170px\"></td>
  9. </tr>
  10. <tr>
  11. <td>Nazwisko:</td>
  12. <td><input type=\"text\" name=\"nazwisko\" style=\"width: 170px\"></td>
  13. </tr>
  14. <tr>
  15. <td>Adres e-mail:*</td>
  16. <td><input type=\"text\" name=\"mail\" style=\"width: 170px\"></td>
  17. </tr>
  18. <tr>
  19. <td>Treść:*</td>
  20. <td><textarea name=\"tresc\" style=\"width: 500px; height: 100px\"></textarea></td>
  21. </tr>
  22.  
  23. <tr>
  24. <td>&nbsp;</td>
  25. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
  26. <input type=\"reset\" value=\"Wyczyść\"></td></form>
  27. </tr>
  28. </table>";
  29. }
  30.  
  31. elseif (!empty($_POST['imie']) && !empty($_POST['mail']) && !empty($_POST['tresc'])) {
  32.  
  33. $message = "Imię: $_POST[imie]\nNazwisko: $_POST[nazwisko]\nAdres e-mail: $_POST[mail]\nTreść: $_POST[tresc]";
  34. $header = "From: $_POST[mail]";
  35. @mail("adres","Wiadomość","$message","$header")
  36. or die('Błąd! Nie udało się wysłać wiadomości.');
  37. echo "<div align=\"center\"><strong>Wiadomość została wysłana!</strong></div>";
  38. }
  39. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypelnij wszystkie wymagane pola!</span>";
  40.  
  41. ?>
johny_s
dodaj odpowiednie kodowanie w nagłówkach maila
ShamY
Ok dziękuję, działa!
  1. $header = "From: $_POST[mail] \r\nContent-type: text/html; charset=utf-8";
schwarzu
Witam, temat chyba nie został zamknięty, a pomoc została udzielona. Chciałbym się podpiąć i zapytać gdzie jest błąd w kodzie, PROBLEM MAM TAKI SAM nie wyświetlają się polskie znaki w wiadomości i temacie. Przeszukałem internet i nic.


<?php


if($_POST)
{

$headers = "From: $_POST[mail] \r\nContent-type: text/html; charset=utf-8";
$to_Email = "k.juszkiewicz@bkfdesign.com"; //Replace with recipient email address
$subject = 'AJDOORS - wiadomość ze strony '.$_SERVER['SERVER_NAME']; //Subject line for emails



//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {

//exit script outputting json data
$output = json_encode(
array(
'type'=>'error',
'text' => 'Request must come from Ajax'
));

die($output);
}

//check $_POST vars are set, exit if any missing
if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Wymagane pola są niewypełnione!'));
die($output);
}

//Sanitize input data using PHP filter_var().
$user_Name = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
$user_Email = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
$user_Message = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);

$user_Message = str_replace("\'", "'", $user_Message);
$user_Message = str_replace("'", "'", $user_Message);

//additional php validation
if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error.
{
$output = json_encode(array('type'=>'error', 'text' => 'Imię i nazwisko jest za krótkie!'));
die($output);
}
if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation
{
$output = json_encode(array('type'=>'error', 'text' => 'Adres e-mail jest niepoprawny!'));
die($output);
}
if(strlen($user_Message)<5) //check emtpy message
{
$output = json_encode(array('type'=>'error', 'text' => 'Wiadomość jest za krótka.'));
die($output);
}

//proceed with PHP email.
$headers = 'From: '.$user_Email.'' . "\r\n" .
'Reply-To: '.$user_Email.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$sentMail = @mail($to_Email, $subject, $user_Message . "\r\n\n" .'-- '.$user_Name. "\r\n" .'-- '.$user_Email, $headers);

if(!$sentMail)
{
$output = json_encode(array('type'=>'error', 'text' => 'Nie można wysłać wiadomości! Sprawdź konfigurację PHP poczty.'));
die($output);
}else{
$output = json_encode(array('type'=>'message', 'text' => 'Hey '.$user_Name .'! Dzięki za wiadomość. Będziemy w kontakcie.'));
die($output);
}
}
?>
Arcioch
Masz dwa razy zmienną $headers i w drugiej nie ma kodowania ustawionego.
A tu masz wyjaśnione dlaczego tytuł maila się "krzaczy" LINK
schwarzu
Dodałem do drugiej zmiennej kodowanie, tak jak napisałeś:

//proceed with PHP email.
$headers = 'From: '.$user_Email.'' . "\r\n Content-type: text/html; charset=utf-8" .
'Reply-To: '.$user_Email.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

i ciągle mam problem w postaci:

ĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚ
ĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚĄŁŻŹĆŃÓŚ




<?php


if($_POST)
{

$headers = "Content-type: text/html; charset=utf-8";
$to_Email = "k.juszkiewicz@bkfdesign.com"; //Replace with recipient email address
$subject = 'AJDOORS - wiadomość ze strony '.$_SERVER['SERVER_NAME']; //Subject line for emails



//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {

//exit script outputting json data
$output = json_encode(
array(
'type'=>'error',
'text' => 'Request must come from Ajax'
));

die($output);
}

//check $_POST vars are set, exit if any missing
if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"]))
{
$output = json_encode(array('type'=>'error', 'text' => 'Wymagane pola są niewypełnione!'));
die($output);
}

//Sanitize input data using PHP filter_var().
$user_Name = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
$user_Email = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
$user_Message = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);

$user_Message = str_replace("\'", "'", $user_Message);
$user_Message = str_replace("'", "'", $user_Message);

//additional php validation
if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error.
{
$output = json_encode(array('type'=>'error', 'text' => 'Imię i nazwisko jest za krótkie!'));
die($output);
}
if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation
{
$output = json_encode(array('type'=>'error', 'text' => 'Adres e-mail jest niepoprawny!'));
die($output);
}
if(strlen($user_Message)<5) //check emtpy message
{
$output = json_encode(array('type'=>'error', 'text' => 'Wiadomość jest za krótka.'));
die($output);
}

//proceed with PHP email.
$headers = 'From: '.$user_Email.'' . "\r\n Content-type: text/html; charset=utf-8" .
'Reply-To: '.$user_Email.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$sentMail = @mail($to_Email, $subject, $user_Message . "\r\n\n" .'-- '.$user_Name. "\r\n" .'-- '.$user_Email, $headers);

if(!$sentMail)
{
$output = json_encode(array('type'=>'error', 'text' => 'Nie można wysłać wiadomości! Sprawdź konfigurację PHP poczty.'));
die($output);
}else{
$output = json_encode(array('type'=>'message', 'text' => 'Hey '.$user_Name .'! Dzięki za wiadomość. Będziemy w kontakcie.'));
die($output);
}
}
?>


nospor
Zacznij prosze uzywac bbcode bo kod jest ciezko czytelny.
schwarzu
No pewnie, że tak, oczywiście masz rację, mam nadzieję, że teraz jest lepiej. Dzięki za uwagę.


Kod
<?php


if($_POST)
{
    
    $headers= "Content-typ: text/html; charset=utf-8r\n";
    $to_Email       = "k.juszkiewicz@bkfdesign.com"; //Replace with recipient email address
    $subject        = 'AJDOORS - wiadomość ze strony '.$_SERVER['SERVER_NAME']; //Subject line for emails
    
    
    
    //check if its an ajax request, exit if not
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    
        //exit script outputting json data
        $output = json_encode(
        array(
            'type'=>'error',
            'text' => 'Request must come from Ajax'
        ));
        
        die($output);
    }
    
    //check $_POST vars are set, exit if any missing
    if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"]))
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Wymagane pola są niewypełnione!'));
        die($output);
    }

    //Sanitize input data using PHP filter_var().
    $user_Name        = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
    $user_Email       = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
    $user_Message     = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);
    
    $user_Message = str_replace("\'", "'", $user_Message);
    $user_Message = str_replace("'", "'", $user_Message);
    
    //additional php validation
    if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error.
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Imię i nazwisko jest za krótkie!'));
        die($output);
    }
    if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Adres e-mail jest niepoprawny!'));
        die($output);
    }
    if(strlen($user_Message)<5) //check emtpy message
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Wiadomość jest za krótka.'));
        die($output);
    }
    
    //proceed with PHP email.
    $headers = 'From: '.$user_Email.'' . "\r\n Content-type: text/html; charset=utf-8" .
    'Reply-To: '.$user_Email.'' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    
    $sentMail = @mail($to_Email, $subject, $user_Message . "\r\n\n"  .'-- '.$user_Name. "\r\n" .'-- '.$user_Email, $headers);
    
    if(!$sentMail)
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Nie można wysłać wiadomości! Sprawdź konfigurację PHP poczty.'));
        die($output);
    }else{
        $output = json_encode(array('type'=>'message', 'text' => 'Hey '.$user_Name .'! Dzięki za wiadomość. Będziemy w kontakcie.'));
        die($output);
    }
}
?>
mlawnik
źle:
Cytat
Content-typ: text/html; charset=utf-8r\n


dobrze
Cytat
Content-type: text/html; charset=utf-8r\n
schwarzu
Dzięki za zaangażowanie w temat, ale to niestety nie to. Poprawiłem błąd, ale problem nie zniknął.

Forumowicze, macie jeszcze jakieś sugestie? Jakiekolwiek?!

Wznawiam prośbę o pomoc, może ktoś pomóc z tym nieszczęsnym PHP? Sam nie jestem w stanie tego rozwiązać.

Kod
<?php
if($_POST)
{
    $to_Email       = "k.juszkiewicz@bkfdesign.com"; //Replace with recipient email address
    $subject        = 'AJDOORS - e-mail ze strony '.$_SERVER['SERVER_NAME']; //Subject line for emails
    
    
    //check if its an ajax request, exit if not
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    
        //exit script outputting json data
        $output = json_encode(
        array(
            'type'=>'error',
            'text' => 'Request must come from Ajax'
        ));
        
        die($output);
    }
    
    //check $_POST vars are set, exit if any missing
    if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"]))
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Wymagane pola są niewypełnione!'));
        die($output);
    }

    //Sanitize input data using PHP filter_var().
    $user_Name        = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
    $user_Email       = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
    $user_Message     = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);
    
    $user_Message = str_replace("\'", "'", $user_Message);
    $user_Message = str_replace("'", "'", $user_Message);
    
    //additional php validation
    if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error.
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Imię i nazwisko jest za krótkie!'));
        die($output);
    }
    if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Adres e-mail jest niepoprawny!'));
        die($output);
    }
    if(strlen($user_Message)<5) //check emtpy message
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Wiadomość jest za krótka.'));
        die($output);
    }
    
    //proceed with PHP email.
    $headers = "From: $_POST[mail] \r\nContent-type: text/html; charset=utf-8" .
    'From: '.$user_Email.'' . "\r\n" .
    'Reply-To: '.$user_Email.'' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    
    $sentMail = @mail($to_Email, $subject, $user_Message . "\r\n\n"  .'-- '.$user_Name. "\r\n" .'-- '.$user_Email, $headers);
    
    if(!$sentMail)
    {
        $output = json_encode(array('type'=>'error', 'text' => 'Nie można wysłać wiadomości! Sprawdź konfigurację PHP poczty.'));
        die($output);
    }else{
        $output = json_encode(array('type'=>'message', 'text' => 'Hey '.$user_Name .'! Dzięki za wiadomość. Będziemy w kontakcie.'));
        die($output);
    }
}
?>
trueblue
Skleiłeś nagłówek Content-type z From.
schwarzu
Dzięki, za zainteresowanie. Czy to powinno wyglądać tak?

Kod
$headers = "Content-type: text/html; charset=utf-8" .
    'From: '.$user_Email.'' . "\r\n" .
    'From: '.$user_Email.'' . "\r\n" .
    'Reply-To: '.$user_Email.'' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
trueblue
Nie, bo nadal są sklejone.
Wydrukuj na ekran wartość zmiennej $headers, sprawdź podgląd źródła strony i zobaczysz.
schwarzu
Kod
$headers = "Content-type: text/html; charset=utf-8" .
    $headers .= 'From: '.$user_Email.'' . "\r\n" .
    'From: '.$user_Email.'' . "\r\n" .
    'Reply-To: '.$user_Email.'' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();


OK. zmienna headers odklejona, ale problem pozostał
trueblue
A pokaż teraz jej wartość.
schwarzu
ŻŹĆŃŁÓŻŹĆŃŁÓ -- kamil -- kamil@kamil.com
trueblue
Zawartość zmiennej $headers.
schwarzu
Dzięki za pomoc i że mnie prowadzisz w tej mgle. Nie będę też ściemniać, że wiem o co chodzi, bo nie bardzo rozumiem co mam pokazać, lub jak to zrobić.
trueblue
  1. echo $headers;


Zobacz wynik w źródle strony. Przyjrzyj się znak po znaku.
schwarzu
jesteś niesamowity, dzięki wielkie za wskazówki i że nie odpuściłeś. Natomiast nie jest aż tak pięknie, teraz przestała się wyświetlać informacja na stronie, że mail został wysłany. Tak na prawdę nic się nie dzieje. Po wciśnięciu przycisku wyślij, mail się wysyła, ale wszystkie dane wciąż są widoczne w oknach i brakuje informacji, że mail został wysłany.
nansss93
Podrzuć kod w bbcode, ale niech to będzie bbcode php
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.