Kodowanie Formularza php

Witam Serdecznie.
mam mały problem z formularzem kontaktowym, otóż jakbym nie kombinował, w wiadomości ostatecznej nie pokazuje polskich znaków.

Kod formularza:
<?php
$field_name = $_POST[‘cf-name’];
$field_email = $_POST[‘cf-email’];
$field_message = $_POST[‘cf-message’];
$field_phone = $_POST[‘cf-phone’];
//Specify the message recipient:
$mail_to = ‘recepcja@xxx.org’;
$subject = 'Nowa Wiadomosc ze strony xxx '.$field_name;
//The email content:
$body_message = 'Imie i Nazwisko: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Telefon: '.$field_phone."\n";
$body_message .= 'Dodatkowe Informacje: '.$field_message;
$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
//Show a javascript message about the successful or unsuccessful sending a message
if ($mail_status) { ?>

<?php
}
else { ?>

<?php
}
?>

Ma ktoś jakiś pomysł ?
Dodanie ‘Content-type: text/html; charset=UTF-8’ . “\r\n”;
nie pomaga

Sprawdź:

  • jakie jest kodowanie pliku PHP,
  • jakie jest kodowanie pliku z formularzem HTML
  • jakie jest zadeklarowane kodowanie w HTML

Zdeklarowane kodowanie w pliku html, jest na polski czyli

Z pliku html, jest odniesienie do contact.php

a sam kod w html wygląda

<div class=" bd-columnwrapper-37 
 col-sm-4">
    <div class="bd-layoutcolumn-37 bd-column" ><div class="bd-vertical-align-wrapper"><form class=" bd-    form-5 "
 action="contact1.php"
 name="form-name" method="post">
    <div class="bd-container-inner">
        <div class="container-fluid">
            <div class=" bd-input-13 form-group">
    <label class="bd-form-label">Imię i Nazwisko</label>


    <input type="text" class="bd-form-input"
 placeholder="Wpisz Imię i Nazwisko"
 name="cf-name" >


</div>

    	<div class=" bd-input-12 form-group">
    <label class="bd-form-label">Email</label>


    <input type="text" class="bd-form-input"
 placeholder="Input"
 value="wpisz Adres e-mail"
 name="cf-email" >


</div>

		<div class=" bd-input-11 form-group">
    <label class="bd-form-label">Telefon</label>


    <input type="text" class="bd-form-input"
 placeholder="Wpisz Numer Telefonu"
 name="cf-phone" >


</div>

		<div class=" bd-textarea-6 form-group">
    <label class="bd-form-label">Dodatkowe Informacje</label>


    <textarea class="bd-form-input"
 name="cf-message"
 placeholder="Wpisz Dodatkowe Informacje"></textarea>


</div>

		<a 
 onclick="jQuery(this).closest('form').submit();" href="#" class="bd-linkbutton-13  bd-button  bd-own-margins     bd-content-element"    >
    Wyślij Rezerwację
</a>

    	<div class=" bd-checkbox-5 form-group">
    <label class="bd-form-label">Kliknij Aby Zaakceptować Warunki </label>

    

    
        
            <div class="bd-form-checkbox checkbox-inline">
                <input type="checkbox" id="form-checkbox-50"  value="Kliknij Aby Zaakceptować Warunki ">
                <label for="form-checkbox-50" class="bd-form-checkbox-label"></label>
            </div>
    
</div>
        </div>
   </div>
</form></div></div>
</div>

Język nie ma znaczenie, znaczenie ma kodowanie pliku oraz to jakie kodowanie deklarujesz w htmlu. Nie da się ustawić kodowania na konkretny język, tylko na konkretny format. Chodzi o to: <meta charset="UTF-8"> plus kodowanie pliku.

Czyli łopatologicznie, jak to rozwiązać ?

W pliku php odpowiedzialnym za wysyłanie ?

Ustawić wszędzie takie samo kodowanie - najlepiej UTF-8 zadeklarować w HTML, a na plikach dać UTF-8 bez BOM.

To w pliku strony html jest zdeklarowany UTF-8

A w jaki sposób go zdeklarować w pliku php ?

$body_message .= 'Dodatkowe Informacje: '.$field_message;
$headers = 'From: '.$field_email."\r\n";
'MIME-Version: 1.0' . "\r\n".
'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";

?

image

Dokładnie tak mam wybrane w notepad +, próbowałem tez konwertować

A header('Content-Type: text/html; charset=utf-8'); na początku pliku php masz?

Nie, Linia od razu zaczyna się

<?php
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_message = $_POST['cf-message'];
$field_phone = $_POST['cf-phone'];

czyli zdefiniować to w taki sposób ?

<?php
'Content-type: text/html; charset=UTF-8' . "\r\n";
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_message = $_POST['cf-message'];
$field_phone = $_POST['cf-phone'];

Doczytaj to będzie jasne :slight_smile: https://www.php.net/manual/en/function.header.php

Oba pliki mają UTF-8 bez BOM? PHP i HTML?

Tak

Pokaż wszystko na ssach.

Jak wyżej Ci napisali. Aby były polskie litery, to w meta musi być na UTF-8 w każdym pliku, czy to jest w HTML, czy w PHP. A już wcześniej pliki html, php muszą być ustawione na kodowanie UTF-8 bez BOM. Jeżeli nadal jest bez polskich liter, to wybierz konwertuj na format UTF-8 bez BOM. Szkoda, że nie pokazałeś całego pliku wraz z meta.

Może tak będzie prościej.
https://drive.google.com/file/d/1eiCnlDk_sMp_kjucT6qXeqZS5XMROMd7/view?usp=sharing

https://drive.google.com/file/d/1isQAMmfnhHag_OiUxDD251EUx0LDYVEj/view?usp=sharing

Zobacz co masz napisane pod<!DOCTYPE HTML>. Nie widzę tam kodowania UTF-8.

W pliku html jest…:

  <meta charset="utf-8">

Co do detekcji znaków bom to nie wiem może się wkradły z wymuszenia zamiast łagodnego ustawienia kodowania na utf-8.

Co tak się ryjesz :), po prostu w pliku jest taki bałagan, że każdy ma prawo do pomyłki. Fakt jest.