Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wstawienie określonego textu po określonej ilości znaków
Forum PHP.pl > Forum > Przedszkole
nekomata
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.
Pikuss
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.
PanGuzol
wordwrap
Może to pomoże.
nekomata
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.
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.