Avaleht
uus teema   vasta Tarkvara »  WWW »  php-ga textis rea murdmine, aga valikuliselt? märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 01.03.2009 18:15:29 php-ga textis rea murdmine, aga valikuliselt? vasta tsitaadiga

Kuidas ma saaksin lehele kuvatavat teksti sedasi näppida, et tavalise teksti pikad sõnad murrab näiteks wordwrap() lühemaks, aga <a href="......."> ja <img src="......."> jutumärkide vahel olevat teksti ei murraks? Kuna ta murrab lehe lähtekoodis ka img aadressi pooleks, siis ei kuvata wysiwyg editoriga lisatud pilte, mille url on liiga pikk. icon_sad.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 01.03.2009 18:57:07 vasta tsitaadiga

Kasutades mõnda HTML-i parserit muudad oma teksti HTML-i elementide puuks, käid puu rekursiivselt läbi otsides tekstielemente ning rakendad neile wordwrapi funktsiooni. Seejärel konverdid puu tekstiks tagasi.
_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 01.03.2009 19:03:08 vasta tsitaadiga

hmm...
function textwrap($str, $max = 32, $break = ' ')
{

   $arr = explode('<', $str);

   $arr[0] = preg_replace('/([^\s]{'.$max.'})/i',"$1$break", $arr[0]);

   for($i = 1; $i < count($arr); $i++)
   {

      $arr2 = explode('>', $arr[$i]);

      $arr2[1] = preg_replace('/([^\s]{'.$max.'})/i',"$1$break", $arr2[1]);

      $arr[$i] = join('>', $arr2);
   }

   return join('<', $arr);
   
}

Tundub toimivat, nagu mul vaja...
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 01.03.2009 21:29:58 vasta tsitaadiga

Kui sa oled kindel, et sul kunagi ühegi HTML-i elemendi atribuudi väärtuse sees ei satu olema "<" või ">", või tekstis ">" siis su kood toimib.

Teine küsimus on see, kas sa tahad takistada ka sellist moodust pikkade ridade tekitamiseks:

30märkiPikkTekst<b>30MärkiPikkTekst</b>30MärkiPikkTekst

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 02.03.2009 10:25:15 vasta tsitaadiga

nene kirjutas:
Kui sa oled kindel, et sul kunagi ühegi HTML-i elemendi atribuudi väärtuse sees ei satu olema "<" või ">", või tekstis ">" siis su kood toimib.

Teine küsimus on see, kas sa tahad takistada ka sellist moodust pikkade ridade tekitamiseks:

30märkiPikkTekst<b>30MärkiPikkTekst</b>30MärkiPikkTekst


Oi jah... :/
Mul oleks vaja ainult <img> ja <a>, vastavalt src="" ja href="" vahele jäävat texti mitte murda, aga kõike muud siiski murda. Mida peaks siis ümber tegema, et ta ainult need 2 tagi tunneks ära ja neis ei murraks rida? Ja parem oleks, kui ta samas murraks <a> ja </a> vahele jäävat texti. icon_rolleyes.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.03.2009 11:25:15 vasta tsitaadiga

Noh, mis sa teha saaksid oleks siis selline jagamine, mis arvestab " märkidega kui <> järgi jaotab html'ks.

function quoteaware_wordwrap($str) {
$inhtml = false;
$inquotes = false;
$last = 0;
$newstr = '';
for($i = 0; $i < strlen($str); $i++) {
    $c = $str[$i];
    if($c == '"' && $inhtml) {
        $inquotes = !$inquotes;
        continue;
    }
    if($c == '<' && !$inhtml) {
        $newstr .= wordwrap(substr($str, $last, $i - $last));
        $last = $i;
        $inhtml = true;
        $inquotes = false;
        continue;
    }
    if($c == '>' && !$inquotes && $inhtml) {
        $newstr .= substr($str, $last, $i - $last);//html tagi sisu, wrappimist pole vaja
        $last = $i;
        $inhtml = false;
        $inquotes = false;
    }
}
return $newstr;
}


Aga minu meelest tundub see ikkagi ülepingutamine ja sinu see explode lähenemine töötaks samuti normaalselt.
tsitaat:

Kui sa oled kindel, et sul kunagi ühegi HTML-i elemendi atribuudi väärtuse sees ei satu olema "<" või ">", või tekstis ">" siis su kood toimib.

WYSIWYG editorid esmalt ei topi kuskile atribuudi sisse mingit javascripti stiilis onclick="if(somevar < othervar) teeMidagi();" ning ka kõik tekstis olevad < ja > märgid escapetakse samuti vastavalt &lt; ja &gt; märkideks.
Ja lisaks selle mure kohta, et tekstis mingi jupp ainult boldiks tehakse: kui tihti üldse selline asi on reaalne ? Et terve ülipika sõna asemel (mille ees ja järel on tühik) tehakse ainult üks jupp pikast sõnast boldiks.

Huvi pärast küsiks, et mis juhtudel sul üldse nii pikad sõnad on tulnud et wordwrapi vaja läinud või kui kitsa ala sisse sa teksti pead ära mahutama ?

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 02.03.2009 11:41:09 vasta tsitaadiga

Mul on näiteks foorum, mille olen ise ehitanud, seal ma saan wysiwyg-editori kasutada, teised saavad bbcode editoriga, aga mõlemal juhul väljastatakse html. Vahel keegi sisestab pika texti, millele on lisatud bold, color vms. (nt. mõni pikem link ilma [ url ]-ita). Sellel juhul ei taha, et see hakkaks lehte venitama laiali.

Aga kus on max. pikkuse määramine selles eelmises funktsioonis siin?
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.03.2009 15:34:15 vasta tsitaadiga

No max pikkust saad juba ise teha juurde, lisa parameeter funktsioonile ja selle annad wordwrapile ette ja ongi olemas
_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 02.03.2009 16:34:32 vasta tsitaadiga

inzinz kirjutas:
No max pikkust saad juba ise teha juurde, lisa parameeter funktsioonile ja selle annad wordwrapile ette ja ongi olemas

Ei saanud küll aru, kuhu ma sinna selle paneksin? Funktsioonile panin lisaks $max, aga wordwrap? Kuidas sinna õigesti panna see?
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.03.2009 18:37:05 vasta tsitaadiga

Uhh ? google ? php.net ? icon_biggrin.gif http://php.net/wordwrap
_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 02.03.2009 19:14:55 vasta tsitaadiga

inzinz kirjutas:
Uhh ? google ? php.net ? icon_biggrin.gif http://php.net/wordwrap

Sealt ma üleüldse alustasingi, kommentaare uurisin. icon_biggrin.gif wordwrap() ma oskan kasutada, aga ma just sellest viimati pakutud funktsioonist rääkisin, et ma ei saa aru, kuidas sinna see $max toppida, et toimiks. icon_smile.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.03.2009 19:28:43 vasta tsitaadiga

No, seal on üks rida mis kutsub välja wordwrap funktsiooni, sinna sellele wordwrapile panegi see $max teise parameetrina ette ja peakski korras olema.
_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 02.03.2009 19:34:09 vasta tsitaadiga

Igatahes, see funktsioon väljastab tühjust. :/
Vahet ei ole, kas seal see $max on või ei. Midagi ei klapi seal.

function textwrap($str, $max = 32)
{
   
      
$inhtml = false;
$inquotes = false;
$last = 0;
$newstr = '';
for($i = 0; $i < strlen($str); $i++) {
    $c = $str[$i];
    if($c == '"' && $inhtml) {
        $inquotes = !$inquotes;
        continue;
    }
    if($c == '<' && !$inhtml) {
        $newstr .= wordwrap(substr($str, $last, $i - $last), $max, ' ', 1);
        $last = $i;
        $inhtml = true;
        $inquotes = false;
        continue;
    }
    if($c == '>' && !$inquotes && $inhtml) {
        $newstr .= substr($str, $last, $i - $last);//html tagi sisu, wrappimist pole vaja
        $last = $i;
        $inhtml = false;
        $inquotes = false;
    }
}
return $newstr;

}
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 02.03.2009 20:22:24 vasta tsitaadiga


function textwrap($str, $max = 32, $sep = ' ', $cut = 1) {
   $inhtml = false;
   $inquotes = false;
   $last = 0;
   $newstr = '';
   for($i = 0; $i < strlen($str); $i++) {
      $c = $str[$i];
      if($c == '"' && $inhtml) {
         $inquotes = !$inquotes;
         continue;
      }
      if($c == '<' && !$inhtml) {
         $newstr .= wordwrap(substr($str, $last, $i - $last), $max, $sep, $cut);
         $last = $i;
         $inhtml = true;
         $inquotes = false;
         continue;
      }
      if($c == '>' && !$inquotes && $inhtml) {
         $newstr .= substr($str, $last, $i - $last + 1);//html tagi sisu, wrappimist pole vaja
         $last = $i + 1;
         $inhtml = false;
         $inquotes = false;
         continue;
      }
      if($i == strlen($str)-1) {
         if(!$inhtml)
            $newstr .= wordwrap(substr($str, $last, $i - $last), $max, $sep, $cut);
         else
            $newstr .= substr($str, $last, $i - $last);//vigane html??
      }
   }
   return $newstr;
}

Selline peaks töötama, üks loogika blokk oli välja jäänud ja +-1 viga sisse lipsanud

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 03.03.2009 10:43:03 vasta tsitaadiga

Nüüd kuvab, aga väljundil ei ole mitte mingit vahet, kas kasutan seda keerulist funktsiooni või ainult wordwrap($str, 32, ' ', 1); icon_sad.gif
Ikka lükkab *a href* ja *img src* vahele tühikud...
Ekraanile linki kuvades peabki tühikud vahele panema, aga sinna ei tohi, mis jääb varjatuks -- <a href=""> ja <img src=""> jutumärkide vahel.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 03.03.2009 11:08:51 vasta tsitaadiga

Kas kopeerisid otse ? Ma näiteks omal tesitisin pikkade sõnade ja pika href aadressiga ja 5 märgi limiidiga ning html osa töötlemine oli kõik tip topp.
Seega küsimus sulle: kas sa üritad html'i töödelda enne kui bbcode->html conversion tehtud on või ikka pärastpoole nagu peakski ? Kui sa bbcode versiooni üritad töödelda siis muidugi on kõik metsas kohe.
Ehk on anda näidis html'i mille korral sul ei tööta ?

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 03.03.2009 11:15:27 vasta tsitaadiga

inzinz kirjutas:
Seega küsimus sulle: kas sa üritad html'i töödelda enne kui bbcode->html conversion tehtud on või ikka pärastpoole nagu peakski ? Kui sa bbcode versiooni üritad töödelda siis muidugi on kõik metsas kohe.
Ehk on anda näidis html'i mille korral sul ei tööta ?

Tegin siit copy-paste.
Vaatasin üle, et töötlemise vahendid ja järjekord on mul siis selline: echo nl2br(smilies(stripslashes(bbcode(textwrap($str, 100))))); (100 märgi pealt sel juhul peab murdma, väljaspool tagide atribuute.) icon_rolleyes.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 03.03.2009 13:21:10 vasta tsitaadiga

ega niipidi ilmselt ei tööta jah. Samuti on kummaline, et peale bbcode-i lased sa peale stripslashes. Proovi parem nii:

echo textwrap(nl2br(smilies(bbcode(stripslashes($str, 100)))));

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 03.03.2009 14:10:27 vasta tsitaadiga

SGM, täpselt nii nagu ma arvasingi, sa andsid ju bbcode stiilis teksti ette sinna ja imestad miks html'i ei tuvasta icon_biggrin.gif
Muuda oma kood niipidi nagu nene andis ja siis peaks kõik töötama nagu vaja.

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 03.03.2009 17:32:26 vasta tsitaadiga

Sain tööle. Paistab, et teeb kõike õigesti nüüd. Tänud teile! icon_smile.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  php-ga textis rea murdmine, aga valikuliselt?
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.