Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
SGM
HV kasutaja

liitunud: 04.12.2005
|
01.03.2009 18:15:29
php-ga textis rea murdmine, aga valikuliselt? |
|
|
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.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
01.03.2009 18:57:07
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
01.03.2009 19:03:08
|
|
|
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 |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
01.03.2009 21:29:58
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
02.03.2009 10:25:15
|
|
|
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.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
02.03.2009 11:25:15
|
|
|
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 < ja > 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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
02.03.2009 11:41:09
|
|
|
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
02.03.2009 15:34:15
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
02.03.2009 16:34:32
|
|
|
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
02.03.2009 19:14:55
|
|
|
Sealt ma üleüldse alustasingi, kommentaare uurisin. 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.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
02.03.2009 19:28:43
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
02.03.2009 19:34:09
|
|
|
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
02.03.2009 20:22:24
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
03.03.2009 10:43:03
|
|
|
Nüüd kuvab, aga väljundil ei ole mitte mingit vahet, kas kasutan seda keerulist funktsiooni või ainult wordwrap($str, 32, ' ', 1);
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
03.03.2009 11:08:51
|
|
|
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
03.03.2009 11:15:27
|
|
|
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.)
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
03.03.2009 13:21:10
|
|
|
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 |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
03.03.2009 14:10:27
|
|
|
SGM, täpselt nii nagu ma arvasingi, sa andsid ju bbcode stiilis teksti ette sinna ja imestad miks html'i ei tuvasta
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 |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
03.03.2009 17:32:26
|
|
|
Sain tööle. Paistab, et teeb kõike õigesti nüüd. Tänud teile!
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
|