Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wstawienie określonego textu po określonej ilości znaków
nekomata
post 20.01.2011, 23:36:02
Post #1





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Witam , przejdę odrazu do rzeczy, więc tworze sobie taki portalik "klanowy" ale mam problem z jedną rzeczą mianowicie nie mogę znaleźć funkcji która umożliwiała by mi wstawienie danego ciągu znaków co daną ilość znaków(dokladnie 1600-1680)




Na obrazku zaznaczyłem o jaką przestrzeń mi chodzi.String który chciałbym wstawić ma po prostu zamknąć div'a i otworzyć drugiego(efekt książek na stronie tongue.gif) aktualnie strona stoi na moim localhoscie i jest w fazie produkcji... na początku poradziłem sobie z tym limitując długość postu do 420 znaków(tak wiem sic!) i 4 postów na stronie, w trakcie dodawania postu dodawałem do zmiennej +1 a gdy zmienna osiągała 4 wstawiałem znacznik następnej strony.jednak teraz chciałbym się pozbyć tego limitu bo jednak 420 znaków bardzo ograniczałoby wolność wypowiedzi usera.Z góry dziękuję za pomoc.

Ten post edytował nekomata 20.01.2011, 23:36:52
Go to the top of the page
+Quote Post
Pikuss
post 21.01.2011, 00:21:46
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 8.02.2010
Skąd: Kraków

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


1) Jeśli cały post ma być przeniesiony na drugą stronę:
  1. <?php
  2. print '<div>';
  3. $ileZn = 0;
  4. while(...){ // tu jakaś twoja pętla przy pomocy której wyświetlasz posty
  5. $ileZn += strlen($post);
  6. if($ileZn > x) // x = 1600,1680 ile sobie ustawisz
  7. print '</div><div>';
  8.  
  9. print $post;
  10. }
  11. print '</div>';
  12. ?>



2) Jeśli post ma być podzielony w miejscu w którym ilość znaków przekroczyła dopuszczalną:
  1. <?php
  2. print '<div>';
  3. $ileZn = 0;
  4. while(...){
  5. $ileZn += strlen($post);
  6. if($ileZn > x){
  7. $post_cz1 = substr($post, 0, -($ileZn-x)); // urwanie postu w miejscu w którym ilość znaków przekroczyła x
  8. $spacja = strRpos($post_cz1, ' '); // ostatnie wystąpienie spacji w urwanym fragmencie
  9.  
  10. $post_cz1 = substr($post_cz1, 0, $spacja); // część pierwsza do spacji
  11. $post_cz2 = substr($post, $spacja); // część druga od spacji
  12. print $post_cz1.'</div><div>'.$post_cz2;
  13. }else
  14. print $post;
  15. }
  16. print '</div>';
  17. ?>


Mam nadzieję że dobrze zrozumiałem problem i myślę, że to powinno zadziałać. Nie jest to co prawda jakieś profesjonalne rozwiązanie, ale jest smile.gif.

Ten post edytował Pikuss 21.01.2011, 00:27:45
Go to the top of the page
+Quote Post
PanGuzol
post 21.01.2011, 00:29:33
Post #3





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


wordwrap
Może to pomoże.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
nekomata
post 21.01.2011, 00:48:25
Post #4





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


kurde, myślałem że da się sprawę załatwić czymś w rodzaju wordwrap'a. mam taki pomysł ale nie wiem czy to by wypaliło mianowicie :
1.Zapisałbym wszystkie posty do stringa.
2. zarzucił na to preg_replace który zamieni 1600 obojętnie jakich znaków na 1600+mój string.
tylko tu kurde problem bo nie za bardzo mi wychodzi z tym preg_replace'm

EDIT:
Problem rozwiązany, więc dla potomnych którzy napotkają się na ten sam problem zostawię ten funkcję którą właśnie napisałem (chyba moja pierwsza pożyteczna haha.gif)
  1. <?php
  2.  
  3. function split_after_char_count($text,$chars,$insert){
  4. $wzor = '#((.){'.$chars.'})#si';
  5. $zrodlo=preg_replace($wzor, "\\1".$insert, $text);
  6. return $zrodlo;
  7. }
  8.  
  9.  
  10.  
  11. // TESTUJEMY biggrin.gif
  12. $text = 'bardzo dziwny jest ten string do testowania';
  13. $rozdzielpo = 10;
  14. $wstaw = ' <br/> ';
  15. echo split_after_char_count($text,$rozdzielpo,$wstaw);
  16. ?>


Dziękuję wszystkim za pomoc,temat do zamknięcia.

Ten post edytował nekomata 21.01.2011, 01:11:53
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: 19.07.2025 - 09:31