PDA

Zobacz pełną wersję : Własny moduł z HTML - kodowanie polskich znaków ?



MariuszL
01-02-2016, 09:49
Utworzyłem własny moduł z kodem HTML - jest to dokładnie ankieta.
Moduł wsadziłem na wybraną stronę w wybranej pozycji.
Wszystko działa i wyświetla się ok (kodowanie znaków w zawartości modułu i samej strony jest ok).
Problemem jest wpisywany tekst - który przychodzi na e-maila.
Tekst nie zawiera polskich znaków.
Występują krzaczory.

Jak zdiagnozować problem ?

Jola
01-02-2016, 20:17
Za pomocą jakiej funkcji wysyłasz maila?

MariuszL
01-02-2016, 20:29
method="post"

Jola
02-02-2016, 13:37
Jeszcze raz:
Za pomocą jakiej funkcji wysyłasz maila?

MariuszL
02-02-2016, 14:03
Moduł - > własny tekst html

index.html

<!DOCTYPE HTML>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Formularz Kontaktowy - Tytuł naszej strony</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
<div id="formularz">
<form method="post" action="kontakt.php">

<label>Imię i nazwisko</label>
<input name="name" placeholder="Tu możesz wpisać swoje dane">

<label>Email</label>
<input name="email" type="email" placeholder="Tu mozesz wpisać swój e-mail">

<label>(nowych i używanych)</label>
<textarea name="maszyny" placeholder="Napisz tu wiadomość"></textarea>

<label>zamiennych</label>
<textarea name="czesci" placeholder="Napisz tu wiadomość"></textarea>

<label>Serwis urządzeń </label>
<textarea name="serwis" placeholder="Napisz tu wiadomość"></textarea>

<input id="submit" name="submit" type="submit" value="Wyślij">

</form>

</div>
</body>

</html>

kontakt.php

<?php


// Tworzymy zmienną dla imienia i nazwiska
$name = $_POST['name'];

// Tworzymy zmienną dla adresu email
$email = $_POST['email'];

// Tworzymy zmienną dla wiadomości
$maszyny = $_POST['maszyny'];

// Tworzymy zmienną dla wiadomości
$czesci = $_POST['czesci'];

// Tworzymy zmienną dla wiadomości
$serwis = $_POST['serwis'];

// Podajesz adres email z którego ma być wysłana wiadomość
$odkogo = "xxx@xxx.pl";

// Podajesz adres email na który chcesz otrzymać wiadomość
$dokogo = "xxx@xxx.pl";

// Podajesz tytuł jaki ma mieć ta wiadomość email
$tytul = "prosty formularz - test";

// Przygotowujesz treść wiadomości
$wiadomosc = "";
$wiadomosc .= "Imie i nazwisko: " . $name . "\n";
$wiadomosc .= "Email: " . $email . "\n";
$wiadomosc .= "Opinia - " . $maszyny . "\n";
$wiadomosc .= "Opinia - " . $czesci . "\n";
$wiadomosc .= "Opinia - " . $serwis . "\n";

// Wysyłamy wiadomość
$sukces = mail($dokogo, $tytul, $wiadomosc, "Od: <$odkogo>");

// Przekierowywujemy na potwierdzenie
if ($sukces){
print "<meta http-equiv=\"refresh\" content=\"0;URL=potwierdzenie.php\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
?>

Jola
02-02-2016, 14:32
Po pierwsze - nie będę komentować potrzeby pisania modułu kontaktowego w przypadku istnienia wielu darmowych.
Po drugie - kod html modułu nie potrzebuje znaczników <html><head><body> - wystarczy <div id="formularz">.....</div>
Po trzecie - funkcja mail obsługuje jeszcze jeden parametr $header, w którym można zdefiniować kodowanie znaków (utf-8)

MariuszL
03-02-2016, 20:13
Ustawiłem $header w ten sposób :

$header .= "Content-typ: text/html; charset=iso-8859-2r/n";
$header .= "Content-Transfer-Encodin: 8bitr\n";

// WysyĹłamy wiadomość
$sukces = mail($dokogo, $tytul, $wiadomosc, $header, "Od: <$odkogo>");


Ustawiłem również UTF-8 - dalej krzaki.

MariuszL
03-02-2016, 20:56
Edyta:

Jaki prosty i konfigurowalny formularz polecilibyście ?
Nad polami textowymi - muszę dopisać kilka linijek tekstu.

Jola
03-02-2016, 21:34
Content-type

$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$header .= 'From: Od kogo <'.$odkogo.'>' . "\r\n";

MariuszL
03-02-2016, 21:49
Zadziałało mi w tej wersji : $header .= "Content-type: text/html; charset=UTF-8r/n";
+ wywalenie "odkogo"z emaila.


Wystąpił jednak kolejny problem z treścią e-maila :

// Przygotowujesz treść wiadomości
$wiadomosc = "";
$wiadomosc .= "Imie i nazwisko: " . $name . "\n";
$wiadomosc .= "Email: " . $email . "\n";
$wiadomosc .= "Opinia - " . $maszyny . "\n";
$wiadomosc .= "Opinia - " . $czesci . "\n";
$wiadomosc .= "Opinia - " . $serwis . "\n";

dzięki temu wcześniej miałem każdy wpis w osobnej lini..

Obecnie jak zadziałały pl znaki to cała treść idzie w jednej lini.

Jak nie urok to sra..... :]

Jola
03-02-2016, 23:54
Bo dałeś Content-type: text/html;
a nie Content-type: text/plain;
Dla text/html użyj <<br />

MariuszL
04-02-2016, 08:57
Jola - dziękuję !!!!!
Wiszę ci trunek :]

- - - Updated - - -



Dla text/html użyj <<br />


Zamiast - "\n" ?

Czy pomiędzy wierszami :

$wiadomosc = "";
$wiadomosc .= "Imie i nazwisko: " . $name . "\n";
$wiadomosc .= "Email: " . $email . "\n";
$wiadomosc .= "Opinia - " . $maszyny . "\n";
$wiadomosc .= "Opinia - " . $czesci . "\n";
$wiadomosc .= "Opinia - " . $serwis . "\n";

Jola
04-02-2016, 14:01
Nowa linia
dla tekstu to \n
dla html <br />
czyli zamiast :)

MariuszL
05-02-2016, 07:12
Teraz już chyba wszystko działa - Jola jeszcze raz dziękuję. !!