Autor | Zpráva | ||
---|---|---|---|
xmass Profil * |
Zdravím. Mám menší problémek. Mám návštěvní knihu ošetřenou dělením dlouhých slov na 60 znaků. Problém je v tom že když někdo vloží nějaký odkaz, tak se i ten odkaz rozdělí a pak nefunguje. Poradí někdo jak upravit script aby to zkrátil slova a přitom si nevšímal dlouhých odkazů?
Script na dělění: if($prezdivka && $obsah) { $pocet = 60; $slovo = split("[[:blank:]]+", $obsah); for($y=0;$y<count($slovo);$y++) { $slovo[$y] = trim($slovo[$y]); if (strlen($slovo[$y])<=$pocet) { $odkaz = $slovo[$y] . " "; $celek .= $odkaz; } else { $delit = ceil(strlen($slovo[$y])/$pocet); for($z=0;$z<$delit;$z++) { $cast = substr($slovo[$y], $z*$pocet, $pocet); $celek .= $cast . " - "; } } } Díky. Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Alphard Profil |
#2 · Zasláno: 16. 8. 2009, 11:05:18
V jaké podobě je ten odkaz? Prostý text nebo html (tj. <a href="...">)?
|
||
Majkl578 Profil |
#3 · Zasláno: 16. 8. 2009, 11:07:17
rekl bych, ze prosty text. pouzil bych regular, idealne i na oziveni odkazu (ten by se mohl teoreticky lamat na novy radek)
|
||
xmass Profil * |
#4 · Zasláno: 16. 8. 2009, 11:07:46
Prostý text... např www.neconeco... nebo http://neconeco... klikatelný odkaz se z toho dělá až při výpisu z DB...
|
||
Alphard Profil |
#5 · Zasláno: 16. 8. 2009, 11:14:35 · Upravil/a: Alphard
Dobrá, vyjdu z vašeho kódu:
Na řádku 10 máte v proměnné $slovo[$y] dané slovo. Mělo by stačit zjistit, jestli jde o odkaz (začátek na www nebo http) a pokud ano, tak pomocí continue přeskočit na další slovo. |
||
xmass Profil * |
#6 · Zasláno: 16. 8. 2009, 11:14:50
Napadlo mě přidat tam podmínku že pokud se jedná o slovo začínající na www nebo http: tak to nebude dělit ale nějak to nefunguje...
$slovo = split("[[:blank:]]+", $obsah); $slovo1 = split('=([^\s]*)(\w://[www\.]*)([^\s]*)=', $obsah); if($slovo != $slovo1 ){... |
||
xmass Profil * |
#7 · Zasláno: 16. 8. 2009, 11:16:11
Napadlo nás to samé, ale nějak nevím jak to provést... Už se s tím hraju hodinu... :(
|
||
Alphard Profil |
#8 · Zasláno: 16. 8. 2009, 11:30:50
for($y=0;$y<count($slovo);$y++) { $slovo[$y] = trim($slovo[$y]); if (preg_match ("~^http|www~", $slovo[$y])) continue; if (strlen($slovo[$y])<=$pocet) { |
||
xmass Profil * |
#9 · Zasláno: 16. 8. 2009, 11:36:51
hmm tak tohle vynechá část s tím kde je odkaz www. nebo http:// s tím že to stejně rozdělí ale nevloží ten začátek... takže místo www.neco.....neco je tam jen -..neco
|
||
Alphard Profil |
#10 · Zasláno: 16. 8. 2009, 11:44:33
Jejda, já zapomněl, že celý vstup postupně kopírujete. Ale to oseknutí začátku indikuje ještě nějakou chybku, co udělá tohle?
for($y=0;$y<count($slovo);$y++) { $slovo[$y] = trim($slovo[$y]); if (strlen($slovo[$y])<=$pocet || preg_match ("~^http|www~", $slovo[$y])) { $odkaz = $slovo[$y] . " "; $celek .= $odkaz; } else { |
||
xmass Profil * |
#11 · Zasláno: 16. 8. 2009, 11:52:04
Nerozdělí nic... ani odkaz ani dlouuuuhé slovo... Jo chybí tam jedna závorka } před else
|
||
Alphard Profil |
#12 · Zasláno: 16. 8. 2009, 12:17:34 · Upravil/a: Alphard
xmass:
„Jo chybí tam jedna závorka } před else“ Nechybí, tím by se předčasně ukončil for cyklus a nic by to nerozdělilo, jak píšete. Já jsem na závorky nešahal :-) Zkusil jsem si to, ale jak to skončí vždy, přepsal jsem většinu původního scriptu. $obsah = "Lorem ipsum dolor sit amet consectetuer libero est Nulla elit et. Lacinia convallis massa orci pede justo tempus vel et CurabiturSuspendisse.Phaselluspenatibusjustourna risusmalesuada justo non pretium In Sed. Vel vel enim Integer semper tellus suscipit orci odio Vestibulum ullamcorper. http://CurabiturSuspendisse.Phaselluspenatibusjustourna Sit lorem dui dui faucibus convallis vitae."; $pocet = 20; $celek = array(); $slova = split("[[:blank:]]+", $obsah); foreach ($slova as $slovo) { if (strlen($slovo)<=$pocet || preg_match ("~^http|www~", $slovo)) { $celek[] = $slovo; } else { $celek[] = wordwrap ($slovo, $pocet, "-", true); } } echo implode(" ", $celek); Tohle mi fungovalo. |
||
xmass Profil * |
#13 · Zasláno: 16. 8. 2009, 12:41:52
tak sem to zkusil. Funguje to trochu jinak než podle očekávání. Když teď zadám dlouhé slovo tak se rozdělí, když zadám dlouhý odkaz tak zůstane celý.. Když ale zadám dlouhé slovo v kombinaci s dlouhým odkazem, tak se nerozdělí ani jedno. Myslím že ale i tohle řešení mi postačí. Nejde totiž o stránky, kde by někdo psal nějaké nesmysly (teda za dva roky co existují byl jeden případ a tomu sem zamezil vkládání příspěvků). To dělení textu a zároveň nechání odkazu by bylo asi složitější a na delší dobu a určitě máte i jinou práci tak už nebudu obtěžovat. Třeba to nějak vyřeším i sám.
Takže díky za rady. |
||
Alphard Profil |
#14 · Zasláno: 16. 8. 2009, 12:44:17
xmass:
„Když ale zadám dlouhé slovo v kombinaci s dlouhým odkazem, tak se nerozdělí ani jedno.“ Teď nevím, jak to myslíte. |
||
xmass Profil * |
#15 · Zasláno: 16. 8. 2009, 12:48:51
no myslím to tak že když napíšu dlouhé slovo a dlouhý odkaz zároveň tak ten script nic nerozdělí...
např: dlouuu....uhé slovo a www.dlouuu...uhý.odkaz zkuste zadat do $obsah= "www.neconeconeconeconeco.html dlouhééééééééééééééééééééééééééé slovo "; |
||
Alphard Profil |
#16 · Zasláno: 16. 8. 2009, 12:55:11
$obsah= "www.neconeconeeeeeeeeeeeeeeeeeeeconeconeco.html dlouheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee slovo "; vypíše www.neconeconeeeeeeeeeeeeeeeeeeeconeconeco.html dlouheeeeeeeeeeeeeee-eeeeeeeeeeeeeeeeeeee-eeee slovo Je to rozdělené. |
||
xmass Profil * |
#17 · Zasláno: 16. 8. 2009, 13:00:11
zajímavé mě to tady nefunguje... Ještě zkusím znovu...
Ano můžu potvrdit že to funguje.. ale kydž zadám první dlouhé slovo a pak až odkaz tak už to nefunguje.. |
||
xmass Profil * |
#18 · Zasláno: 16. 8. 2009, 13:12:26
Teď sem ještě přišel na to že dlouhá emailová adresa se taky rozdělí a vytvořený odkaz z ní pak nefunguje... Ale to nebude problém nikdo snad nemá emailovou adresu delší než 60 znaků...
|
||
Alphard Profil |
#19 · Zasláno: 16. 8. 2009, 15:20:59
xmass:
„ale kydž zadám první dlouhé slovo a pak až odkaz tak už to nefunguje“ Zkoušel jsem a mně to také funguje. Navíc by v tom neměl být rozdíl. Text je rozdělen na samostatná slova a každé slovo je zpracované samostatně. Nemáte chybu jinde? „Teď sem ještě přišel na to že dlouhá emailová adresa se taky rozdělí“ Také si myslím, že tak dlouhá adresa není :-) Ale jestli chcete být důsledný, tak stačí modifikovat podmínkový výraz, který rozhoduje o přeskočení nebo rozdělení. |
||
AM_ Profil |
#20 · Zasláno: 16. 8. 2009, 17:15:13
mě se pro "osekávání" osvědčilo nastavovat nadřazenému prvku overflow:hidden; proč plýtvat drahocenným časem nad uživateli, kteří se neumí kulturně vyjááááááááááááááááááááádřit? Pokud vím, tak nejdelší české slovo má okolo 30 písmen, takže se dá očekávat, že smysluplná sdělení se při 60ti znacích zobrazí dobře.
|
||
xmass Profil * |
#21 · Zasláno: 16. 8. 2009, 17:46:36
„Zkoušel jsem a mně to také funguje. Navíc by v tom neměl být rozdíl. Text je rozdělen na samostatná slova a každé slovo je zpracované samostatně.
Nemáte chybu jinde? “ V chybě bych to neviděl. Možná to způsobuje script jako celek. Zkoušel sem to localhostu i přímo na webu a dělá to jak píšu... Ale to už snad tak nevadí... Jde hlavně o ten odkaz. A když tam někdo vloží nějaký nesmyls tak to stejně hned smažu. Takže sem spokojený i tak.. Takže díky... :) |
||
Časová prodleva: 15 let
|
0