Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dzielenie stringa
Forum PHP.pl > Forum > Przedszkole
budzyk
potrzebuje funkcji, ktora dzieli długi string na mniejsze cześci, oddzielajac je spacjami,

chodzi o to, ze mam na swojje stronie komentarze, i nie chec, żeby wsyztsko mi sie rozjeżdżało, jeśli jakiś imbecyl wpisze sto piećdziesiat wykrzykników nie rozdzielajac ich spacją.
najbardzije mi zalezy an fukcji, która pobierała by cały komentarz, analizowała każdy z jego wyrazów, i jesli jakiś jest dłuższy od powiedzmy 40 znaków, to wstawia w środek spacje. nie mam kompletnie pomysłu, jak sie do tego zabrać...
wipo
A takie cos nie pomoże
Kod
$komentarz="fsdfsdfsdfsdf fsdfsdfsdfsdf fsdfdsf";
$komentarz=explode(" ",$komentarz);
for($x=0;$x<count($komenarz);$x++){
   if (strlen($komentarz[$x])>40) $komentarz[$x]=substr($komentarz[$x],0,40);
   print $komenarz[$x]." ";
}
myth
Chyba mozna prosciej:
wordwrap

  1. <?php
  2. $string="To jest bardzo dlugi text !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!!!!!!!!!!!!"
    ;
  3.  
  4. echo wordwrap($string, 10, " ", 1);
  5.  
  6. # Wyswietli: 
  7. # To jest bardzo dlugi text !!!!!!!!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!
    !! !!!!!!!!!! !!!!!!!
  8. ?>
Luciano
Polecam ci dwie z moich ulubionych funkcji explode" title="Zobacz w manualu php" target="_manual oraz implode" title="Zobacz w manualu php" target="_manual
explode stworzy ci ze stringa tablice "lamiac" go w odpowiednich miejsach np. spacji
pozniej petelka sprawdzajaca dlugosc kazdego z wyrazow i wsio biggrin.gif
budzyk
ok, teraz doszedł mi problem taki, że chciałbym, jak user napisze adtres strony, w stylu www.wp.pl, to zeby system wyswietlal to jako napis 'LINK', ktory mozna kliknac, i on przenosi na dana strone. napisałem fukcje


Kod
<?php

function DzielString($string) {


$string = strip_tags($string);

$table = explode(" ", $string);

$count = count($table);
for ($i=0; $i<=$count; $i++) {
    if (ereg ("www.", $table[$i])) { $table[$i] = '<a href=http://' .$table[$i] .' target=_blank>link</a>';
    } elseif (ereg ("http://", $table[$i])) { $table[$i] = '<a href=' .$table[$i] .' target=_blank>link</a>';
    
    } else     {

    $table[$i] = wordwrap($table[$i], 35, ' ', 1);

    }

}

$string = implode(" ", $table);

$string = addslashes($string);
        
        return $string;

}
?>


i wszystko by było cacy, ale problemy pojawiaja sie, jak w okolicach linku pojawia sie znak nowej linkii. zalezy mi na tym, aby znaki nowej linii zostały, wiec nie moge po porstu ich skasować.

przyklad:

gdy user wpisze:
bleble www.wp.pl
bleble

powinno wyskoczyc:
bleble link
bleble

w czym link klikalny.

a wyskakuje:

bleble bleble target=_blank>link

i prowadzi do strony 'http://www.wp.pl<br/'

jak pozbyś sie znakow nowej linii tylko w okolicach linku?
myth
Po co przelatujesz po kazdym wyrazie osobno?

1. do wordwrap'a wsadz caly string
2. do zamiany linka zastosuj preg_replace
budzyk
tak, tylko wtedy jak uzytkownik poda linka
dłuższego niż 35 znaków, to wordwrap go podzieli.
wipo
To walidator linków proponuje zrobić
Albo zakazać wstawiania linków i je wyrzucać z formularza
budzyk
z wyrzucaniem nie było by porblemu, ale chodzi mi właśnie o to, zeby były, nawet jak beda wadliwe, to nie przeszkadza, jesli zamieniaja sie na wyraz LINK. istnieją linki które mają wiecej niż 35 znaków, wiec chodzi mi głównie o to, jak pozbyć się tych znaków końca linii.
wipo
No to przed wordwrapem zamień znalezione linki na jakieś zmienne np !LINK1! następnie podziel string a pożniej zamień zmienne !LINK1! na właściwe linki.
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.