Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak 'złamać' linię aby nie zniknęły spacje
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Mam pewnego diva o ustalonej szerokości do którego userzy dorzucają informacje. Chciałem się zabezpieczyć przed tym aby nie rozwaliło mi konstrukcji diva jeśli ktoś wrzuci za długie słowo. Jak wiadomo string podzieli się na kolejne linijki wg spacji, czyli po kolejnych słowach. Ale co jeśli ktoś wrzuci np tekst "TojestJedenDlugiWyrazKtoryPOPSUJEkontrukcjęDIVa".
Próbowałem to rozwiązać w ten sposób:
  1. $string=wordwrap($string,1,"\n",true);
I wszystko pięknie oprócz tego że to połyka spacje. Taki string wyjściowy nie ma spacji między wyrazami nawet jeśli uprzednio każdą spację zastąpię np 2 lub 3 spacjami.
Macie pomysł jak to rozwiązać?
drake88
Jeśli dobrze zrozumiałem, chcesz zrobić łamanie linii, czyli funkcja która zamienia wszystkie znaki \n na <br />

  1. <?
  2. echo nl2br($dane);
  3. ?>



sadistic_son
nie nie, o to mi nie chodzi.
Moze inaczej to wyjasnie. Zalozmy ze mam string: WWWWYYYYYRRRRRAAAAZZZZ spacja wyraz2 wyraz3 KONIEEEEEEEC.
Teraz jesli go wyswietle w moim divie to pierwsze slowo (WWWYYY...) spowoduje ze w divie pojawia sie paski przewijania ktorych chce uniknac. Jednoczesnie tez nie chce dawac wlasciwosci overflow:hidden. Chce aby ten string zostal podzielony tak aby slowa ktore sa za dlugie byly lamane. Ale metoda ktora przedstawilem wyzej powoduje tez kompletny zanik spacji przez co koncowy string, nie wazne czy sklada sie z za dlugich slow czy z tych ok, jest wyswietlany jako jedna calosc (choc nastepuje przejscie do nowej linii przy koncu diva).
Spawnm
http://pl2.php.net/wordwrap
drake88
Paski przewijania powiadasz, szerokość więc ustaw na określony rozmiar a wysokość na height:auto; a z kodem:

Cytat
$string=wordwrap($string,1," \n",true);


Spróbuj z tą spacją przed \n
sadistic_son
Cytat(Spawnm @ 9.09.2009, 17:48:16 ) *
No bardzo dziękuję za wskazanie funkcji którą mam użytą w pierwszym poście, i o której mówiłem, że nie daje porządanego efektu.

vonEverest rzecz w tym ze div ma na stale ustawiona szerokosc i wysokosc. A wcisniecie spacji przed "\n" niestety nie daje zadnego efektu.
Spawnm
zobacz parametry tej funkcji, chcesz łamać po każdym znaku, daj np. $string=wordwrap($z,8,"\n",true);
8 znakowy wyraz się zmieści pewnie w diwie więc go nie rozwali większe będą łamane
sadistic_son
Tak, ok. Ale ciezko przewidziec jaki sie zmiesci a jaki nie poniewaz litery maja rozne szerokosci: 8 znaków: "WWWWWWWW" i drugie 8 znaków: "iiiiiiii" a szerokości różne. Ale już ajkoś wymóżdżyłem jak to rozwiązać. Otóż:
  1. $string='Wyraz1 Wyraz2 WWWYYYRRRAAAZZZ3';
  2. //najpierw zasptepujemy kazda spacje stringiem &nbsp;
  3. $string=str_replace(" ","&nbsp;",$string);
  4. //nastepnie lamiemy string co linijke, wciskajac spacje co kazda litere
  5. $string=wordwrap($string,1," ",true);
  6. //teraz zamiast spacji (ktorych w naszym stringu sa 2) pojawia sie & n b s p (ze spacjami miedzy &, n, b,s i p)
  7. //wiec trzeba & n b s p ; zastapic na normalne &nbsp; bez spacji
  8. $string=str_replace("& n b s p ;","&nbsp;",$string);
I to daje zamierzony efekt. Ale dzieki za zainteresowanie. Pozdrawiam:)
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.