PHP kłóci się z POSTem i textarea
Kilka dni temu, podczas projektowania edytora tekstu zauważyłem ciekawe zjawisko dotyczące przesyłania danych POSTem i ich odbioru w PHP. Zjawisko to, a w zasadzie błąd, powoduje ucięcie pojedynczego znaku nowej linii podczas przesyłania formularza, pod warunkiem, że jest to pierwszy znak w przesyłanym tekście. Problem ten dotyczy tekstu edytowanego za pomocą html’owego textarea i występuje w PHP 4 i 5 (sprawdzałem na PHP 4.4.6 oraz PHP 5.2.2). Dodam, że efekt ten nie występuje gdy formularz jest przesyłany metodą GET.
Tutaj znajduje się przykładowy skrypt, a tutaj jego kod źródłowy.
Aktualizacja:
Wygląda na to, że don_jaro ma rację. Prawdopodobnie nie jest to wina ani PHPa, ani serwera, ale przeglądarek, które w magiczny sposób ignorują pierwszy znak nowej linii w textarea. Z drugiej strony dziwne jest, że wszystkie przeglądarki (które zdołałem uruchomić, tzn IE6, IE7, Opera 9, Firefox 2, Safari 2) zachowują się w ten sam sposób.

21. August 2007, 23:13
Dziwne… u mnie ten kod działa poprawnie
http://projekty.webhome.pl/abc.php
21. August 2007, 23:28
“Problem” leży raczej w sposobie wysyłania danych przez przeglądarki. Spróbuj takiego kodu (uproszczony):
Zobaczysz, że mimo dodania znaków nowej lini w pierwszym textarea, oba zawierają taki sam tekst (bez nowej linii) - wynika z tego, że to przeglądarki ignorują pierwszy znak nowej linii. Używając Odyseusza (http://www.netcoffee.pl/pogodzinach/2006/02/16/oddyseus-serwer-proxy/) możesz sprawdzić, że wysyłane wartości obu pól są jednakowe.
21. August 2007, 23:30
Hmmm, kod zniknął był, spróbuję wpisać to jeszcze raz, używając nawiasów [], zamiast trójkątnych…
[?php
define('NL', "\r\n");
define('TEXT', 'test');
?]
[textarea][?php echo NL . TEXT ?][/textarea]
[textarea][?php echo TEXT ?][/textarea]
21. August 2007, 23:36
Tu masz wyjaśnienie
http://us.php.net/manual/en/faq.using.php#faq.using.newlines
22. August 2007, 00:03
zamien ‘ na ”
http://pl2.php.net/types.string
dopiero w podwojnych cudzyslowach ‘honorowane’ sa \n\r
22. August 2007, 08:50
Michał: Jeśli wydaje wam się, że działa poprawnie sprawdźcie czy czasami zamiast nowych linii nie macie na przykład spacji i nowej linii. Często się zdarza, że właśnie tak jest, a mnie interesuje przypadek gdy mamy np. 5 nowych linii i jakiś tekst.
22. August 2007, 08:55
Kasjan.pl: zmiana ‘ na ” nie pomaga, to nie jest problem znaku nowej linii definiowanego przez \n\r , a raczej przesyłania. Efekt kasowania nowej linii nie występuje np. przy przesyłaniu GETem, mimo użycia ‘.