Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Usuwanie pustych wierszy z textarea
robert-s
post 21.08.2012, 14:08:32
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Wypociłem taki kawałek kodu (generalnie jest to wycięty mały fragment ze skryptu do sortowania linijek według różnych kryteriów):

  1. <?php
  2.  
  3. if (isset($_POST['submit1'])) {
  4. $textarea1 = preg_replace('/\n+/', "\n", trim($_POST['textarea1']));
  5. $rozbij = explode("\n", $textarea1);
  6. }
  7. else {
  8. }
  9. ?>
  10.  
  11. <form name="forma1" method="post" action="test.php">
  12. <input type="submit" name="submit1" value="Wykonaj"/>
  13. <br>
  14. <textarea name="textarea1" wrap="off" style="width: 100%; height: 50%;">
  15. <?php
  16. if (isset($_POST['submit1'])) {
  17. foreach ($rozbij as $dowyswietlenia) {
  18. echo $dowyswietlenia;
  19. }
  20. }
  21. ?>
  22. </textarea>
  23. </form>
  24.  
  25. <?php
  26.  
  27. print_r($rozbij);
  28.  
  29. ?>


Według najlepszej odpowiedzi z http://stackoverflow.com/questions/4214685...extareas-output po wpisaniu np.:

Cytat
sajhdsajdh


dsfds

dsfdsfsd


powinny zostać usunięte puste linijki i dać:

Cytat
sajhdsajdh
dsfds
dsfdsfsd


zgodnie z fragmentem:

  1. $textarea1 = preg_replace('/\n+/', "\n", trim($_POST['textarea1']));


Nic takiego się nie dzieje, przerwy zostają. Próbowałem też innymi metodami i nic. Błagam o jakąś wskazówkę, jak pozbyć się tych pustych linijek w elegancki sposób. Istotne jest to, aby wynik pojawił się w textarea po wysłaniu formularza. Jak działa powyższy kod można zobaczyć tutaj.

Enter w textarea wysyła w ogóle znak nowej linii \n czy jakoś inaczej jest to rozwiązane?

I jeszcze ciekawostka. Zdefiniowanie funkcji:

  1. function por($a,$b){
  2. return (strlen($b) - strlen($a));
  3. }


i dodanie:

  1. usort($rozbij,'por');


zaraz po:

  1. $rozbij = explode("\n", $textarea1)


daje takie zachowanie. Po pierwszym naciśnięciu "Wykonaj" linie są sortowane od najdłuższej do najkrótszej (występują małe błędy w działaniu, ale mniejsza w tej chwili o to) i wszystkie puste linijki trafiają na koniec. Można ustawić tam kursor. Znikają dopiero po drugim naciśnięciu "Wykonaj". Dziwne... Działanie można zobaczyć tutaj.

Ten post edytował robert-s 21.08.2012, 14:31:41
Go to the top of the page
+Quote Post
abort
post 21.08.2012, 14:30:09
Post #2





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Znak nowej linii różni się w poszczególnych środowiskach: http://vim.wikia.com/wiki/File_format

Jeśli raz usuniesz znaki nowej linii, to skąd bedziesz wiedział gdzie je dodać po wysłaniu formularza?
Go to the top of the page
+Quote Post
robert-s
post 21.08.2012, 14:43:59
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Chodzi oczywiście o usunięcie tylko pustych linijek. preg_replace w:
  1. $textarea1 = preg_replace('/\n+/', "\n", trim($_POST['textarea1']));

teoretycznie powinno zminieniać wiele znaków nowej linii występujących obok siebie na jeden. Ale coś jest nie tak i nie mam pojęcia co. W drugim odsylaczu działa to po drugim naciśnieciu "Wykonaj". Dlaczego więc działa jeśli kilka znaków nowej lini jest na końcu, a nie działa, kiedy są między innymi linijkami?

Ten post edytował robert-s 21.08.2012, 14:46:23
Go to the top of the page
+Quote Post
abort
post 21.08.2012, 15:23:50
Post #4





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Przecież pisałem, i nawet podałem odnośnik, w którym tłumaczą (I PODAJĄ!), że znaki końca linii różnią się w zależności od środowiska:
- na Uniksach jest to "\n"
- na Macach jest to "\r"
- na Windowsach jest to "\r\n"

Masz serwer na Linuksie, a przeglądarkę na Windowsie? Spróbuj:

  1. echo preg_replace('/(\r\n)+/', "\n", trim($_POST['textarea1']));


U mnie (serwer: Linux, przeglądarka: Windows) zadziałało.
Musisz też (jako zadanie domowe) zastanowić się nad przerobieniem tego na kod uniwersalny.
Go to the top of the page
+Quote Post
robert-s
post 21.08.2012, 15:40:33
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Ok. Działa. Dzięki wielkie za naprowadzenie na problem!

Ten post edytował robert-s 21.08.2012, 15:40:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:49