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
V jaké podobě je ten odkaz? Prostý text nebo html (tj. <a href="...">)?
Majkl578
Profil
rekl bych, ze prosty text. pouzil bych regular, idealne i na oziveni odkazu (ten by se mohl teoreticky lamat na novy radek)
xmass
Profil *
Prostý text... např www.neconeco... nebo http://neconeco... klikatelný odkaz se z toho dělá až při výpisu z DB...
Alphard
Profil
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 *
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 *
Napadlo nás to samé, ale nějak nevím jak to provést... Už se s tím hraju hodinu... :(
Alphard
Profil
    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 *
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
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 *
Nerozdělí nic... ani odkaz ani dlouuuuhé slovo... Jo chybí tam jedna závorka } před else
Alphard
Profil
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 *
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
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 *
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
$obsah= "www.neconeconeeeeeeeeeeeeeeeeeeeconeconeco.html  dlouheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee slovo ";


vypíše

www.neconeconeeeeeeeeeeeeeeeeeeeconeconeco.html dlouheeeeeeeeeeeeeee-eeeeeeeeeeeeeeeeeeee-eeee slovo


Je to rozdělené.
xmass
Profil *
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 *
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
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
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 *
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... :)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: