Mam taki prosty kod php, który służy do wyświetlania formularza kontaktowego na www. Wszystko działa, ale jest jeden problem. Chodzi o kodowanie polskich znaków. Pojawiają się krzaczki. Kiedy dodam sekcję meta, wiadomości są OK, zero krzaczków, ale pojawia się błąd na stronie:
Warning: Cannot modify header information - headers already sent by (output started at /homez.111/zapaleni/www/wyslij.php:5) in /homez.111/zapaleni/www/wyslij.php on line 11
<?php
if (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
$message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]";
$header = "From: $_POST[imie] <$_POST[email]>";
@mail("xxx@gmail.com","Wiadomosc ze strony xxx.pl","$message","$header")
or die('Nie udało się wysłać wiadomości');
header('location:http://xxx.pl');
}
else echo "Wypełnij wszystkie pola formularza!";
?>
[/code]
Komunikat wyraźnie mówi że próbujesz ponownie wysłać nagłówek gdy jest on już wysłany co jest niemożliwe, pewnie includujesz plik wyślij.php w innym pliku php który już zawiera nagłówek.
Najprostsze rozwiązanie: usuń nagłówek z pliku wyślij.php i ustaw poprawny charset w nagłówku w pliku w którym includujesz ten plik.
Bardziej zaawansowane rozwiązanie: oprócz powyższego dodaj do pliku wyślij.php sprawdzanie czy nagłówek został już wysłany i wysyłanie nowego nagłówka zawierającego charset tylko gdy nagłówek nie był wysłany.
Możliwe, że zapisujesz plik w formacie UTF-8 z tzw. BOM. W Notepad++ da się edytować tryb kodowania i zapisać jako UTF-8 bez BOM, co spowoduje, że nie będzie problemów ze znakami zapisanymi jako UTF-8 (które pewnie masz, dlatego z tym masz “krzaczki”).
Ewentualnie, możesz prawidłowo zakodować swoje znaki w ISO-8859-2, tak jak deklarujesz. Najnowsza wersja Notepad++ chyba też już ma taką możliwość.