REKLAMA: Jeśli już potrafisz tworzyć strony internetowe, wejdź na blog z poradami dla średnio-zaawansowanych webmasterów www.PomocnikWebmastera.pl |
Piszę różne skrypty w PHP. Jedną z częściej używanych funkcji jest funkcja mail, która wysyła maila. Często moje skrypty pobierają dane, przetwarzają i wysyłają emaila. Niestety, ale pod Outlook Express przykładowy mail wygląda tak:
Cześć
Mam dla Ciebie ważną informację:
a pod operą ten sam email wygląda tak:
Cześć
Mam dla Ciebie ważną informację
Pojawia się pytanie: dlaczego użytkownicy M2 (program pocztowy wbudowany w przeglądarkę internetową Opera) dostają maile z "podwójnymi" enterami? Odpowiedź jest prosta, ale długo szukałem rozwiązania. Problem tkwi w kodzie PHP, używam mniej więcej takiej konstrukcji:
<?
$tresc="Czesc
Mam dla Ciebie wazna informacje";
mail($adresat,$temat,$tresc,$od);
?>
Konstrukcja jest jak najbardziej OK. Zwróć uwagę, że zmienna $tresc zajmuje 2 linijki (jest to wygodny sposób zapisywania długich zmiennych z enterami). Problem właśnie tutaj tkwi. Otóż plik utworzyłem pod Windowsem a serwery na których mam strony są pod Linuxami. Pod windowsem kod ASCII entera to #13,#10 (CR LF) a pod linuxem to samo #10 (LF). No i zmienna tresc zawiera w miejsce enterów zamiast #10 aż 2 znaki: #13 #10 i Outlook Express to interpretuje jako 1 normalny enter a Opera traktuje taką sekwencję znaków jako dwa entery (!). Dlatego tworząc pliki PHP zadbaj, aby koniec wiersza zawierał sam znak #10. Program, w którym pisuje skrypty PHP (EditPad) ma opcję zapisywania plików tekstowych w formacie Linuxowym, wystarczy z menu Convert wybrać opcję To Linux i od teraz już zawsze ten plik będzie miał entery zapisywane w podstaci kodu ASCII #10 (LF). Jak ponownie otworzysz ten plik w programie EditPad to on sam zorientuje się, że koniec wiersza to kod ASCII #10 i nie trzeba już będzie pamiętać o konwersji. No a maile czytane pod Operą w końcu nie będą miały podwójnych enterów