Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie pustych wierszy z textarea
Forum PHP.pl > Forum > Przedszkole
robert-s
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.
abort
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?
robert-s
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?
abort
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.
robert-s
Ok. Działa. Dzięki wielkie za naprowadzenie na problem!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.